1

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

4

2 回答 2

3

不,不要只die()使用“dontHackMe”。我看到了两个结果:

  1. 如果用户不是恶意的并且这是一个错误或一个诚实的问题,那么您就没有向用户提供任何求助权。
  2. 这实际上是一种相当业余的反应,甚至可能会激起真正的攻击者寻找更多安全漏洞。

HTTP 定义了响应的状态码列表。只需选择正确的代码并使用该代码以及某种默认响应页面进行响应。

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

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

  1. 通过提供有用的页面,您可以创建人们可以看到和欣赏的人类可读的输出形式,从而使您的应用程序更加用户友好。
  2. 通过在您的响应中返回正确的状态代码(您的所有响应,而不仅仅是拒绝潜在的黑客攻击),您可以创建一个机器可读的界面,自动化客户端可以使用该界面更有效地与您的应用程序交互。(例如,一个 400 响应告诉一个非恶意的自动化客户端,它甚至不应该再次提出该请求……该请求已被接收并处理,但被发现是错误的。)

编辑:澄清......这是为了回应真正糟糕的请求。如果表单中提交的数据完全不正确(不符合业务规则,在预期数字的地方使用字母等),那么Michael Hampton 提供了一个完美的建议。本质上,服务器会“装傻”并重新显示表单。

不要向潜在的攻击者提供比他们已有的更多信息(请记住,错误消息比他们已经拥有的信息更多。)应用程序只会说:“嗯......您尝试提交此表单,但它是错误的。在这里,再试一次。”

于 2012-07-11T08:06:15.830 回答
1

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

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

于 2012-07-11T08:08:00.847 回答