从表单发布信息时,使用$ _REQUEST或$ _POST更好吗?

时间:2008-10-27 14:45:11

标签: php

我有一个表单,用户可以输入他们的名字,然后将其添加到$ message中,以便通过电子邮件发送。

使用$_POST$_REQUEST

是否更好?

以下是使用$_REQUEST

的摘要
$message.= "Name: ".$_REQUEST["fname"]." ".$_REQUEST["mname"]." ".$_REQUEST["lname"]."\n";

7 个答案:

答案 0 :(得分:7)

我的方法过去是使用 $ _ REQUEST 来处理我认为是一个大错误的一切。最近,我一直在努力更加努力地将GET用于读取请求&仅针对写请求进行POST。

为此,我认为使用 $ _ GET 进行GET请求& POST请求的 $ _ POST 使我的意图在我的代码中更清晰。

答案 1 :(得分:6)

答案是:这取决于您希望如何使用它。

如果您使用$_POST,则表示只能通过POST进入。 如果你正在使用$_REQUEST,那意味着你接受POST,GET(和COOKIE,但它主要是我们感兴趣的前两个)。

对于类似这样的事情,$_POST可能会更整洁,但如果您正在制作搜索引擎,那么允许设置搜索网址可能是个好主意。但是,您可能希望允许大量特殊参数来缩小搜索范围,如果这会占用大量URL空间,您可能也希望允许POSTDATA。

正如迪伦提到的那样,请记住,两者都不能代替任何安全。

答案 2 :(得分:1)

使用哪一个并不重要。只需确保您使用某种形式的表单安全性。

答案 3 :(得分:1)

我刚刚收听Security Now第166集,这是关于跨网站请求伪造的内容,其中,史蒂夫提出了使用$_POST表单而不是$_REQUEST的好例子。 (间接地,他没有谈论PHP本身,但确实说你不应该接受表格的GET和POST。)原因是很容易使用GET请求进行CSRF攻击但不容易使用POST。

使用$_POST本身并不能消除CSRF攻击的可能性,但它确实减少了它。史蒂夫还建议在请求中使用加密强的伪随机隐藏字段,以消除“盲”请求的可能性。

答案 4 :(得分:0)

_POST如果数据正在某处更新(即如果操作有副作用),则_REQUEST否则,如果您不关心数据是否来自GET,POST,或任何其他方法。

答案 5 :(得分:0)

除非你有充分的理由不这样做(比如迈克尔提到的搜索引擎),否则最好使用$ _GET和$ _POST代替$ _REQUEST来避免任何歧义或混淆。在GET和POST数据中具有相同的参数名称。

答案 6 :(得分:0)

我使用$ _REQUEST的唯一时间是我需要能够支持来自$ _POST或$ _GET的数据。

例如,如果我有一个应该修改记录的表单,我最初可能会将URL中的记录ID作为id = X传递。因此,当第一次加载表单时,我可以使用$ _GET ['id']来确定我们要修改的记录。

但是,在提交修改操作时,表单应该是POST,因为它将更改数据并且不是幂等的。在这种情况下,处理表单提交时,记录ID可以作为$ _POST ['id']访问。

但是如果表单提交中出现错误并且我需要使用有用的错误消息重新加载表单会发生什么?在这种情况下,表单生成代码需要通过查看不在URL中的POSTed id来确定要使用的记录。

在这种情况下,我会在表单显示逻辑中使用$ _REQUEST ['id'],以便它可以支持任一场景。但是对于表单处理,我会使用$ _POST ['id']进行严格检查。