【发布时间】:2014-06-27 20:46:53
【问题描述】:
我对如何防止虚假跨域请求做了一些研究,发现了很多有用的信息。但是,它们似乎都没有直接解决我的顾虑,而且由于我的应用程序必须处理这种特定情况,我想完全理解它。
我有一个简单的 php 邮件网站:mailsite.com
本站点将允许其他预定义地址,例如user.com,向其发送POST数据,并处理包含to和mesaage的信息;然后从 mailsite.com 向他们发送一封电子邮件至to,并附上消息message。
目前,我正在使用$_SERVER[ "HTTP_ORIGIN" ] 和$_SERVER[ "HTTP_REFERER" ] 来检查请求的来源;如果它来自预定义的域,则对其进行处理。但是,我读过一些文章说:
- HTTP_ORIGIN 甚至没有在 PHP 文档中编入索引,因为它几乎是针对每个浏览器的,因此拒绝发送这些信息的浏览器将无法工作。 HTTP_REFERER 很容易伪造。
- token 可以很好地防止 CSRF。
但是,我允许的请求来自第三个预定义网站,令牌在这种情况下如何工作?
我的问题是:如果我允许特定域向我的网站发布数据,我如何确保(或最安全的方式)这些请求来自我预期的网站? HTTP_ORIGIN 使用起来还不够安全吗?我敢于考虑允许第三个网站向我的网站发布数据,因为我已经看到 Facebook 允许人们访问他们的数据库。必须有一些可能的解决方案来检查请求的来源。
【问题讨论】:
-
我确定您的意思是
$_SERVER[ "HTTP_REFFERAL" ]对吧?你打错字了。 -
是的。我很抱歉错字。我是用手机打出来的。非常感谢您指出这一点。
-
是否需要支持不支持CORS的浏览器?否则不清楚你的担忧是什么......
-
@Fred-ii 我确定你的意思是
$_SERVER['HTTP_REFERER']对吧? ;) -
是的@GeorgeCummins 我也站得住脚。我从 OP 的
original post中获取它。忘记了下划线。