我是一个开发人员,我正在创建一个脚本,与游戏服务器接口,以更新玩家的统计数据。我发送了一个带有多部分表单数据的POST请求,在最后一个边界上意外地出现了错误的边界。
Content-Type: multipart/form-data; boundary=--------484554302
但是缺少了一个字符----------48455430--,它从服务器上触发了这个响应:
MySQL error 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\r\n----------48455430-- = '' WHERE id = '463413'' at line 1)我对SQL不太了解,但这似乎是一个潜在的漏洞。有什么建议吗?
发布于 2018-06-12 10:32:53
看起来,在没有适当的编码或使用预先准备好的语句的情况下,您正在将前面一组数据中应该包含的内容传递给MySQL。因此,MySQL将边界解释为SQL代码,并抛出一个错误,说明它是无效的。
至少,您需要对SQL查询中包含的任何数据进行编码。更好的是,将数据强制为特定类型--如果需要一个整数,请确保只允许整数通过,在数据到达数据库之前拒绝任何不是整数的数据。更好的是,这样做,并使用预先准备的语句。
准备好的语句强制您在SQL中使用可执行SQL和数据之间的分离,因此即使意外数据通过,数据库也不会将其视为SQL语句的一部分,而是尝试将其用作数据。它们可用于最常用的web语言和最常见的数据库。它们并不完美(参见准备好的语句对SQL注入是否100%安全?),但它们比包含原始数据要好得多。
https://security.stackexchange.com/questions/187602
复制相似问题