【问题标题】:Best practices to deal with absent/wrongly typed GET variables?处理缺失/错误类型的 GET 变量的最佳实践?
【发布时间】:2010-12-07 18:59:17
【问题描述】:

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

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

  • 吐出一个错误,说明您拒绝请求的原因
  • 如果在没有“forum”变量的情况下调用 forum-page.php,只需重定向到默认页面,例如 forum-page.php?forum=1。对于输入错误的论坛变量也是如此。
  • 重定向到其他页面。类似于论坛/董事会索引?
  • 其他选项?

真的很想了解您对此的看法。

【问题讨论】:

    标签: php http error-handling validation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      1. 对于错误/缺失的必需变量,抛出 400 或 404(取决于您的应用程序)。但是,对于 400,我会优雅地失败到默认页面 (forum-page.php),并在页面顶部的错误框中显示错误。
      2. 对于可能输入错误的错误非必要变量,请优雅地返回默认页面。
      3. 对于格式或对象类型完全错误的错误非必要变量,请抛出 404,因为它们可能试图破坏您的应用程序的安全性。

      最终,永远不要做的真正重要的事情是尝试“猜测”错误/缺失的变量并为用户填充它(在大多数情况下)。我遇到过许多网络应用程序,其中这种行为被黑客滥用以欺骗网络应用程序来模拟漏洞。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2017-11-26
        • 2019-10-28
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多