在进行快速测试以检查SQL注入时(不是详尽无遗,只是出于好奇),我输入了
'或1 = 1
进入我的搜索栏,服务器向我扔了一个406 HTTP错误。我发现它很奇怪,并认为它可能是一个SQL问题,但其他粗略的SQL注入测试,如
'或者是真的
但网站反应正确并划定了'。我觉得在这一点上可以说这不是一个SQL问题,虽然以防万一这里是php消毒代码
$query = trim(str_replace(array('%', '_'), array('\\%', '\\_'), mysqli_real_escape_string($con, htmlspecialchars($query))));
根据快速谷歌搜索(source1,source2,source3),406错误是指返回的数据类型与HTTP请求标头不匹配。我发现有一种类型不匹配很奇怪,因为其他查询工作得很好..实际上
'或1 '或1 =
两者都工作正常(即它们被正确转义)。常规搜索结果,即非恶意搜索结果也会正常返回。有关为什么会发生这种情况的任何建议?我主持使用GoDaddy,如果这意味着什么。
答案 0 :(得分:2)
当启用mod_security时,如果它检测到“明显的”SQL注入,则会抛出406错误。看看你的日志,它必须说:
ModSecurity:拒绝访问代码406 [...] [tag“WEB ATTACK / SQL INJECTION”]
答案 1 :(得分:1)
406不可接受
请求的资源只能根据请求中发送的Accept标头生成不可接受的内容。
许多网络服务器(或对它们的扩展)可以检测到&阻止潜在的SQL注入攻击。这与您的PHP代码无关。
答案 2 :(得分:1)
实际上,406的真正含义是:
浏览器通过请求中的Accept
标头询问了特定类型的响应格式(例如“text / html”)。
服务器说“我不能以那种格式给你回复”。
要诊断这一点,您需要确定所请求的内容(例如,使用浏览器大小的Web开发人员工具),请求将要进入服务器代码的哪一部分(仔细检查服务器日志?)及其原因没有(不能)发送请求的响应格式。
<强>更新强>
看起来有一个PHP特定的答案......其中PHP“共同选择”406响应代码意味着与HTTP规范编写者意图不同的东西。看到其他答案。 (但是我对诊断这个问题的建议会引导你在日志文件中找到该消息。)