为什么我收到HTTP 406错误?

时间:2014-02-16 01:27:15

标签: php sql http

在进行快速测试以检查SQL注入时(不是详尽无遗,只是出于好奇),我输入了

  

'或1 = 1

进入我的搜索栏,服务器向我扔了一个406 HTTP错误。我发现它很奇怪,并认为它可能是一个SQL问题,但其他粗略的SQL注入测试,如

  

'或者是真的

但网站反应正确并划定了'。我觉得在这一点上可以说这不是一个SQL问题,虽然以防万一这里是php消毒代码

$query = trim(str_replace(array('%', '_'), array('\\%', '\\_'), mysqli_real_escape_string($con, htmlspecialchars($query))));

根据快速谷歌搜索(source1source2source3),406错误是指返回的数据类型与HTTP请求标头不匹配。我发现有一种类型不匹配很奇怪,因为其他查询工作得很好..实际上

  

'或1   '或1 =

两者都工作正常(即它们被正确转义)。常规搜索结果,即非恶意搜索结果也会正常返回。有关为什么会发生这种情况的任何建议?我主持使用GoDaddy,如果这意味着什么。

3 个答案:

答案 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规范编写者意图不同的东西。看到其他答案。 (但是我对诊断这个问题的建议会引导你在日志文件中找到该消息。)

相关问题