我所阅读的教材称$_REQUEST存在安全问题,因此最好使用$_POST。
这样做可以吗?
我认为将$_POST描述为比$_REQUEST更安全是有风险的。
如果数据在使用之前没有进行验证和清洗,那么就存在可能的攻击途径。
简而言之:如果数据没有得到安全地处理,那么数据来自何处都无所谓。
$_REQUEST有问题的原因是它会获取来自于$_GET、$_POST和$_COOKIE的值,这意味着如果你编写代码时采用了某些错误的信任客户端的假设,那么恶意用户可能会利用这一点,在不同的地方提供一个值来覆盖你尝试传递的值。
这也意味着你可能会给你的助手错误的指令,因为他可能从$_REQUEST
中获取了GET或COOKIE的值。你需要使用实际出现所需值的位置,而不仅仅是$_POST
。
$_POST
、$_GET
、$_COOKIE
和$_REQUEST
(前者的组合),以及其他一些内容。$_GET
和$_REQUEST
(因为它包括$_GET
)与$_POST
分开,因为生成(即操纵)POST请求要稍微困难一些。重点在于这里的稍微,但至少使用POST进行敏感操作可以消除另一个易受攻击的层。当涉及到数据获取时,告诉用户使用$_POST
而不是$_REQUEST
是完全可以的。更加确定数据来源始终是更好的选择。
@Christian:
当谈到某些变量比其他变量更危险时,我会将$_GET和包含$_GET的$_REQUEST与$_POST分开,因为生成一个POST请求要稍微困难一些,即操作一个POST请求比GET请求要稍微困难。这里的重点是稍微,但至少使用POST来处理敏感操作可以减少另一个易受攻击的层面。
嘟嘟声。抱歉,但这不是真的。
任何了解GET和POST之间差异或未经过滤的输入可能被利用的人,都不会犹豫一秒钟就启动Tamper Data。
有些人在这里是正确的:在设计良好的系统中使用$_REQUEST既不会增加安全性,也不会降低安全性。
使用$_POST
和$_REQUEST
之间没有真正的安全差异,您应该以同样的严谨程度对数据进行消毒。
$_REQUEST
最大的问题是,您可能正在尝试从POST表单中获取数据,但可能具有相同名称的GET参数。数据将来自哪里?最好明确要求从您期望的位置请求数据,在该示例中使用$_POST
有一些微小的安全优势-在GET参数上执行XSS(更具体地说是XSRF)攻击更容易,如果您使用$_REQUEST
,而您实际上只想要POST数据。
很少有情况需要从POST、GET或cookie中获取数据。如果要获取POST数据,请使用$_POST
,如果要从GET参数中获取数据,请使用$_GET
,如果要使用cookie数据,请使用$_COOKIE
最安全的方式是验证和验证数据。我通常为表单生成一个随机唯一ID并将其存储在用户的会话中,但这很容易被决心的攻击者绕过。更好的方法是清理所有传入的数据。请查看htmlspecialchars()及其相关函数。我还使用第三方工具进行跨站点脚本攻击防护,例如HTML Purifier。
在一些实用的注意事项上,始终对应该是数字的内容使用intval(),转义所有传入的字符串,在电话号码、电子邮件或任何将成为SQL查询一部分的内容中使用正则表达式。
希望这对你有所帮助。
$_POST
而不是$_REQUEST
是否可以说更安全?使用$_POST
是否有效地消除了通过URL输入数据的能力? - Nick Bedford