处理缺席/错误输入的GET变量的最佳实践?

时间:2009-10-18 15:00:16

标签: php http error-handling validation

当您检测到您的获取请求被破坏或传递错误类型的数据时,您会怎么做?假设您有一个forum-page.php?forum = 3,其中列出了与论坛3相关的所有主题。

处理缺少“论坛”变量的好方法是什么?如果不是整数,你会得到一个字符串呢?你会如何回应这样一个错误的请求?

  • 发出错误,告诉您拒绝请求的原因
  • 如果在没有“论坛”变量的情况下调用forum-page.php,只需重定向到默认页面,例如forum-page.php?forum = 1。对于错误输入的论坛变量,同样的事情。
  • 重定向到其他页面。像论坛/董事会索引?
  • 其他选择?

真的很想阅读你对此的看法。

2 个答案:

答案 0 :(得分:1)

我通常返回400(错误请求),其状态描述解释了原因(例如,“论坛参数是必需的”)。不确定PHP是否允许这样做(ASP.NET确实如此),但随后您可以将400映射到自定义页面,该页面以对您的应用程序有意义的方式显示错误。

答案 1 :(得分:0)

这取决于每个页面及其GET请求。大多数页面(例如您用作示例的页面)可能会优雅地失败,但是其他需要丢失变量的页面可能需要抛出400(错误请求)或404(未找到页面)。 404实际上是非常必要的,因为搜索引擎可能会有一个错误的链接或通过互联网传递,所以你想要阻止这种行为。

我的观点是尝试以下方法:

  1. 对于错误/缺少必需的变量,抛出400或404(取决于您的应用)。但是,对于400,我会优雅地失败到默认页面(forum-page.php)并在页面顶部的错误框中显示错误。
  2. 对于可能输入错误的错误非必要变量,优先失败到默认页面。
  3. 对于完全错误格式或对象类型的错误非必要变量,抛出404,因为它们可能会试图破坏应用程序的安全性。
  4. 最终,永远不要做的最重要的事情是尝试“猜测”错误/缺失的变量并为用户填充(在大多数情况下)。我遇到过很多网络应用程序,黑客滥用这种行为来欺骗webapp来模拟漏洞。