我在CodeIgniter工作,我想向我的控制器/模型发送请求,其中包含多个参数。通过隐藏表单传递这些参数(即使用$_POST
)而不是通过URI传递它们(例如'travel / $ month / $ day /')之间是否存在差异?这种方法是否存在安全问题?
示例安全问题:
URI
http://www.example.com/travel/$month/$day/
隐藏表格:
form_hidden('month',$month);
form_hidden('day',$day);
答案 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)适合你。
答案 3 :(得分:0)
我最近遇到了同样的问题。当URL中显示任何其他内容时,您将面临公开网站方法/数据的风险。经过相当多的研究,我选择只在绝对需要时显示变量,或者页面只是一个简单的视图。您在网址中公开的数据越多,您可能需要设置的支票就越多(如果用户以x方式修改网址,该怎么办)。
另一个考虑因素是能够为URL添加书签或链接(可能是视图)。一种想法是通过加密字符串隐藏URL中的变量。然后,您可以将加密的字符串存储在数据库中,并根据需要进行序列化。我为搜索引擎做了这个,它给了我两全其美。这与CodeIgniter有关。