URI与隐藏表格

时间:2009-06-11 14:53:49

标签: php security codeigniter

我在CodeIgniter工作,我想向我的控制器/模型发送请求,其中包含多个参数。通过隐藏表单传递这些参数(即使用$_POST)而不是通过URI传递它们(例如'travel / $ month / $ day /')之间是否存在差异?这种方法是否存在安全问题?

示例安全问题

  • URI

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

  • 隐藏表格:

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

这意味着他可以看到URI。

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

答案 2 :(得分:0)

如果您监控您的传入数据(用户是邪恶的妖精,请记住),并在必要时进行清理,这不会产生太大的影响。差异仅取决于可用性:如果您希望用户能够访问相同的结果而无需经常访问表单,那么请使用URL方法。

老实说,你的例子没有给出足够的数据来确定哪种方法(POST / GET)适合你。

建议阅读:GET versus POST in terms of security?

答案 3 :(得分:0)

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

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