如果$ _SERVER ['HTTP_REFERER']不可靠,我将使用什么来确保网络应用程序的完整性?

时间:2011-04-21 14:15:32

标签: php

我认为通过使用$_SERVER['HTTP_REFERER']变量来 保证 我是非常光滑的。我的脚本是从相应的页面调用的。

幸运的是,当我在测试浏览器中执行header('Location: yourPathHere.php')重定向时,它不会设置$_SERVER['HTTP_REFERER']变量。所以我在http://php.net/manual/en/reserved.variables.server.php看了一下,发现这个...

  

'HTTP_REFERER'

     

页面的地址(如果有的话)   将用户代理引用到当前   页。这是由用户代理设置的。   并非所有用户代理都会设置此项,并且   一些提供修改的能力   HTTP_REFERER作为一项功能。简而言之,   它真的不可信任。

所以我的问题是:我如何 保证 我的网页是从受信任的来源导航到的?

编辑:澄清有关评论部分的问题。我正在努力避免使用XSRF(跨站点请求伪造)。

2 个答案:

答案 0 :(得分:5)

依赖任何用户发起的输入进行请求验证几乎都不比没有验证更好。

您应该阅读维基百科中的section on CSRF countermeasures,了解解决该问题的可行方法的基本概要。

简而言之:

网站提供各种CSRF对策:

  • 在所有表单提交和副作用URL中要求使用特定于用户的秘密令牌,以防止CSRF;攻击者的网站无法在其提交的内容中加入正确的令牌
  • 要求客户在相同的HTTP请求中提供身份验证数据,用于执行任何具有安全隐患的操作(汇款等)
  • 限制会话cookie的生命周期
  • 确保没有允许无意访问Flash电影的crossdomain.xml文件

答案 1 :(得分:0)

推荐页面是否也在您的控制之下? 如果是这样,您可以尝试在用户访问页面A时设置一些服务器端会话变量,并在他尝试访问页面B时检查它们。 但正如其他回应者所说 - 这与防止XSS无关。