我们应该怎样处理坏请求?

时间:2012-07-11 07:57:20

标签: php security

在php中,当你处理GET / POST请求时,你必须检查它们等。如果参数丢失或坏了怎么办?如果它应该是某种黑客攻击,你应该怎么做?只有die();和“dontHackMe”?

2 个答案:

答案 0 :(得分:3)

不,不只是die()与“dontHackMe”。我看到了两个结果:

  1. 如果用户没有恶意,这是一个错误或一个诚实的问题,那么您已经无法向用户寻求帮助。
  2. 这实际上是一个非常业余的回应,甚至可能会激怒一个真正的攻击者寻找更多的安全漏洞。
  3. HTTP为响应定义a list of status codes。只需选择正确的一个并回复该代码,以及某种默认的响应页面。

    例如,如果请求以某种方式格式错误或不正确,则400(错误请求)响应代码是可行的方法。响应中的实际页面应该表明它是一个错误的请求,甚至可能为用户提供一个选项,以便他们在需要时寻求帮助(例如指向站点上的帮助部分的链接或指向联系表单的链接)

    这种响应结构的原因有两个:

    1. 通过提供有用的页面,您可以创建一种人类可读的输出形式,供人们查看和欣赏,使您的应用程序更加用户友好。
    2. 通过在您的回复中返回正确的状态代码(所有回复,而不仅仅是拒绝潜在的黑客攻击),您可以创建一个机器可读的界面,自动客户端可以使用该界面更有效地与您的应用程序进行交互。 (例如,400响应告诉非恶意的自动化客户端它甚至不应该再次提出请求了......请求已被接收并处理,并且被发现是坏的。)
    3. 修改:澄清......这是为了回应真正的错误的请求。如果表单中提交的数据完全不正确(不符合业务规则,使用字母表中的数字等),则Michael Hampton offers a perfectly sound suggestion。本质上,服务器将“玩愚蠢”,只是重新显示表单。

      不要向潜在的攻击者提供任何比他们已有的更多信息。 (请记住,错误的错误信息比他们已有的信息更多。)应用程序只是说,“嗯......你试图提交这个表单,但这是错的。在这里,再试一次。”

答案 1 :(得分:1)

除非HTTP标头本身出现问题,否则不要发送HTTP 4xx响应。

如果您收到来自客户端的无效输入,请重新显示表单,并将无效字段突出显示为无效。