带有Referer的PHP表单安全性

标签 php security xss

我正在组建一个网站,该网站可以供用户输入。我想知道是否编写如下函数:

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 依赖于指向 protected 页面的操纵链接(被攻击的用户有特权)。用户@Rook 是正确的。

唯一的异常(exception)是攻击可能发生在被攻击的网络应用程序内部,例如通过注入(inject)恶意 JavaScript 代码。在这种情况下,引用检查是无用的,因为攻击来自“安全”URL,但可以说是基于 session 或一次性 token 的解决方案,因为 token 触手可及的恶意 JavaScript,可以轻松检索。

但是,由于 HTTP_REFERER 已被某些代理剥离,因此使用一次性 token 更适合防止此类攻击。

关于带有Referer的PHP表单安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2841399/

相关文章:

php - preg_match() 期望参数 2 为字符串,在 CakePHP 中给出错误的对象

php - 在 php 中合并这两个数组

php - PHP 中 HTTPRequest 的替代方案

linux - 进程可以拥有的每个不同 UID 的用途是什么?

php - 转义变量

web-services - 在线 JSONP 转换器/包装器

php - 无法在 PhpStorm 中键入 "}"

如果用户未通过身份验证,则使用 Spring 安全标记

c - 线性化攻击

javascript - Java 中转义字符以避免 XSS