我正在组建一个可以让用户输入的网站.我想知道是否写了一个函数:
if(getenv("HTTP_REFERER") != 'http://www.myURL.com/submitArea'){ die('don\'t be an jerk, ruin your own site'); }else{ // continue with form processing }
足以防止跨站点表单提交.
编辑:如果没有,防止表单从其他主机提交的最佳做法是什么?
不 - HTTP_REFERER
可以在客户端自由欺骗,并不是请求来自何处的可靠指标.
更新:我误读了关于跨站点伪造的部分:为此,检查引用是一种有效的安全措施,因为CSRF依赖于指向受保护页面的被操纵链接(被攻击用户具有权限).用户@Rook是正确的.
唯一的例外是,攻击可能发生在被攻击的Web应用程序中,例如通过注入恶意JavaScript代码.在这种情况下,引用检查是无用的,因为攻击来自"安全"URL,但可以说是基于会话或一次性令牌的解决方案,因为令牌可以到达恶意JavaScript并且可以是容易检索.
但是,使用一次性令牌非常有利于防止这种攻击,因为HTTP_REFERER
某些代理会将其剥离.