【发布时间】:2017-04-16 22:54:24
【问题描述】:
我们的一些用户在我们的网站上遇到了一些间歇性错误(PDO 异常)。检查日志后,我发现字符串 String ('A=0) 附加到 HTTP 获取。这很奇怪,因为我们绝对没有对此进行编码,而且它只发生在不同页面中的某些用户身上,而且不一致。
错误日志如下: [错误] 28960#0: *500749 FastCGI 在标准错误中发送:“PHP 消息:处理另一个错误时发生错误: 带有消息“SQLSTATE [42000]”的异常“PDOException”:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在“A=0”附近使用正确的语法 在第 4 行限制 1'
从上游读取响应头时,客户端:10.202.1.135,服务器:xxxx.com,请求:“GET /index.php/productdetail?pid=8473'A=0 HTTP/1.1”,上游:“fastcgi: //127.0.0.1:9000”,主机:“xxxx.com”
注意: /index.php/productdetail?pid=8473 是没有 'A=0
的正确 URL感谢任何可以就如何/何时附加 'A=0 提供一些见解的人。
【问题讨论】:
-
在这种情况下,您需要搜索设置相关查询的代码并对其进行调试。
-
根据给定的信息,无法告诉您为什么会发生这种情况。唯一可以说明的是,您的代码容易受到 SQL 注入的影响(在查询中使用之前,您不要转义
pid)。因为如果您要进行适当的转义,那么简单地将'A=0附加到参数不会导致 sql 语法错误。 -
主要问题是什么导致 'A=0 附加到 GET。是否有一些我们可以查看的服务器设置?顺便说一句,我们正在使用 Nginx。
-
即使我们为 SQL 注入转义了 pid,该 pid 仍然不正确(类似于“8473'A”而不是 8473),因此页面仍然无法正常工作。