【问题标题】:URIs vs Hidden FormsURI 与隐藏形式
【发布时间】:2009-06-11 14:53:49
【问题描述】:

我在 CodeIgniter 中工作,我想向我的控制器/模型发送涉及多个参数的请求。通过隐藏形式(即使用$_POST)传递这些参数与通过URI(例如'travel/$month/$day/')传递它们有区别吗?这种方法是否存在任何安全问题?

安全问题示例

  • URI

    http://www.example.com/travel/$month/$day/

  • 隐藏形式:

    form_hidden('month',$month);
    form_hidden('day',$day);

【问题讨论】:

    标签: php security codeigniter


    【解决方案1】:

    经验法则 — GET 请求不应该改变事物的状态。因此,如果您确实更改了某些内容或请求 - 使用带有 nonce 值的隐藏表单(以防止意外重新提交和CSRF attacks)。否则,没有区别。

    身份验证应该与 URI 和 POST 数据分离——有 cookie、HTTP 身份验证和 SSL 客户端证书。大家都知道 2009 年 6 月 11 日,可能很多人都知道您在站点的 URI(或“年”、“月”和“日” POST 字段)中使用了/$year/$month/$day/ 方案。但是只有那些有权访问的人才能看到这个页面上的内容(或 POST 数据到这个 URI)。而且,是的,GET 和 POST 数据都很容易被篡改,因此您显然必须检查其有效性。

    【讨论】:

      【解决方案2】:

      如果您选择 URI,如果用户为这些 URL 添加书签,
      它带来了安全问题。

      如果任何用户点击任何链接,
      那么目标 Web 服务器现在可以知道了
      HTTP_REFFER 和服务器管理员
      可以知道链接。

      这意味着他可以看到 URI。

      所以我个人的看法是
      你最好选择隐藏形式。

      【讨论】:

        【解决方案3】:

        如果您监控传入的数据(用户是邪恶的妖精,请记住),并在必要时进行清理,这不会有太大的不同。区别只在于可用性:如果您希望用户能够访问相同的结果而不必总是通过表单,那么请使用 URL 方法。

        老实说,您的示例没有提供足够的数据来确定哪种方法(POST/GET)适合您。

        推荐阅读:GET versus POST in terms of security?

        【讨论】:

        • 谢谢!对不起,我的帖子被简化了。我的实际目标是创建一个可以传递 user_ids、question_ids、answer_ids、category_ids 的论坛……感谢相关帖子,我正在阅读。
        • 如果你想允许直接链接到问题、答案、用户页面(如果你问我,都是好主意)然后允许 URL 值。您会注意到 StackOverflow 会这样做……这应该会给您一些安慰。
        【解决方案4】:

        我最近遇到了同样的问题。当 URL 中暴露任何其他内容时,您将面临暴露网站方法/数据的风险。经过大量研究,我选择仅在绝对需要时或页面只是一个简单视图时才显示变量。您在 URL 中公开的数据越多,您可能需要进行的检查就越多(如果用户以 x 方式修改 URL 会怎样)。

        另一个考虑因素是书签或链接到 URL(可能是视图)的能力。一种想法是通过加密字符串隐藏 URL 中的变量。然后,您可以将加密字符串存储在数据库中并根据需要进行序列化。我为搜索引擎做了这个,它给了我两全其美的东西。这是使用 CodeIgniter 的。

        【讨论】:

          猜你喜欢
          • 2013-10-20
          • 2016-03-25
          • 1970-01-01
          • 1970-01-01
          • 2017-05-16
          • 1970-01-01
          • 2017-06-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多