我认为通过使用$_SERVER['HTTP_REFERER']
变量来 保证 我是非常光滑的。我的脚本是从相应的页面调用的。
幸运的是,当我在测试浏览器中执行header('Location: yourPathHere.php')
重定向时,它不会设置$_SERVER['HTTP_REFERER']
变量。所以我在http://php.net/manual/en/reserved.variables.server.php看了一下,发现这个...
'HTTP_REFERER'
页面的地址(如果有的话) 将用户代理引用到当前 页。这是由用户代理设置的。 并非所有用户代理都会设置此项,并且 一些提供修改的能力 HTTP_REFERER作为一项功能。简而言之, 它真的不可信任。
所以我的问题是:我如何 保证 我的网页是从受信任的来源导航到的?
编辑:澄清有关评论部分的问题。我正在努力避免使用XSRF(跨站点请求伪造)。
答案 0 :(得分:5)
依赖任何用户发起的输入进行请求验证几乎都不比没有验证更好。
您应该阅读维基百科中的section on CSRF countermeasures,了解解决该问题的可行方法的基本概要。
简而言之:
网站提供各种CSRF对策:
答案 1 :(得分:0)
推荐页面是否也在您的控制之下? 如果是这样,您可以尝试在用户访问页面A时设置一些服务器端会话变量,并在他尝试访问页面B时检查它们。 但正如其他回应者所说 - 这与防止XSS无关。