【发布时间】:2013-04-24 15:20:38
【问题描述】:
我通过在每个表单的隐藏输入中包含一个带有 PHP 的令牌来实现 CSRF 保护。当然,每个令牌只能使用一次。
但是,有些工具(例如任何 Web 开发人员工具)允许更改输入。例如,我可以更改页面输入表单:我可以启用禁用的复选框,并且我可以将输入框更改为 textarea 框,而无需重新加载页面或类似的东西。 CSRF 不会捕捉到这样的变化。
那么,为了保证安全,我需要验证多少表单?我是否需要验证每个输入以确保它没有被更改,包括选择、复选框、隐藏输入等?假设这些没有被改变肯定是不安全的吗?
【问题讨论】:
-
不,您不能确定通过
$_POST或$_GET进入的任何内容都没有被操纵。 -
永远不要相信用户提供的内容。如果字段有效很重要,则验证它。例如,一个电子邮件地址可能值得验证,但一个 cmets 框可能只需要检查它是否为空。