假设我发现我收到的 Web 应用程序请求显然是 SQL 注入攻击或类似攻击。我写了一个简短的测试来检查请求变量中的"顽皮"字符串。如果我找到一个,我应该用什么代码来响应?
我正在考虑返回"403 禁止"并且没有内容,但我不确定。
我认为403 Forbidden
意味着不应该访问该资源。
因此,我会改用400 Bad Request
。毕竟,只要用户提出合法请求,他们就可以访问该页面。
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
对我来说,"400:错误请求"似乎是最合乎逻辑的选择。
编辑:也许这更多地取决于上下文。
如果确实无法继续脚本,请返回 400 或 404 代码。
在所有其他情况下,当您的代码"检测到"恶意尝试时,不应通知用户(黑客)。验证应是检测无效输入的类型,而不是恶意尝试。
唯一的例外是暴力攻击(有关如何防止暴力登录
网站的更多信息)。例如:
如果您的表单包含用户名文本框,并且用户(黑客)尝试使用某种带引号的 SQL 语句登录/注册,则您的验证应自动显示"用户名无效"。
另一方面,出于登录目的,您应该使用链接中所述的选项保护您的应用程序免受暴力攻击。
如果您能够识别请求的问题,并且他们要求允许某些内容,只是以一种偷偷摸摸的方式,您应该能够防止它们的任何损害并处理它们。但是,如果请求没有意义,400 Bad Request可能是最佳选择。
我同意问题的前提,即恶意请求应该有一个HTTP代码。通知黑客这是恶意请求不是问题,因为他们已经知道这是恶意的。他们现在知道服务器知道的事实可能是一种威慑。无论如何,它不会给攻击者带来任何优势。但是,这种代码的最大优点是,处理该请求的任何服务提供商现在都知道这是一个恶意请求,然后可以采取特定操作。例如,像CloudFlair这样的公司可以使用它来自动禁止发出此类恶意请求的IP地址。