我正在用CakePHP制作一个系统,这个系统需要相当安全,因为我们处理的是钱、客户账户等。到目前为止,一切都运行得很好,直到我不得不与一个支付平台集成,在这个平台中,我需要重定向到他们的网站,而他们重定向回我的网站。
这在我的开发机器上运行良好(debug = 2),但在生产环境中,当客户被重定向回来时,他会得到一个登录提示,而不是回到他的“登录区域”。经过深入研究,我发现这是因为CakePHP设置了session.referer_check,如果HTTP_REFERER来自另一个主机而不是我的主机,它会使会话无效。
现在,通常情况下,我会毫不犹豫地禁用它,但在这个系统中,我比平时更关心安全性。
我的问题是session.referer_check到底应该保护我不受什么影响?
如果我关闭它,会对我的网站造成什么样的攻击/漏洞利用/坏事?
我猜这东西的存在一定有原因,但我想不出它能保护我不受什么伤害。
你能给予我出个主意吗?
关掉它安全吗?
谢谢
丹尼尔
3条答案
按热度按时间kknvjkwl1#
这是为了对Session Fixation和CSRF/XSRF提供有限的保护。检查引用是停止xsrf的有效方法。停止会话固定的更好方法是
Session.use_only_cookies
,因为黑客无法在受害者浏览器上为他尚未控制的域设置Cookie。然而,Session.referer_check很容易被绕过。它只是在referer域中寻找一个子字符串。如果子字符串一起丢失,如果原始URL是https://,那么会话ID将无效。然而,因为它是一个子字符串而不是一个完整的字符串,那么你可以通过从
www.somedomain.com.some_hacker.com
引用来绕过www.somedomain.com
。所以简而言之,我认为这是完全无用的。nhaq1z212#
请记住,referer_check所做的基本上都是类似于以下内容的:
referer_check
中内置的PHP不接受URL数组,这很烦人,但您总是可以创建自己的URL数组。因此,对于CakePHP,您可以执行以下操作:
在您的
app_controller::before_filter
功能中,请致电:......或者类似的东西......抱歉代码格式,文本区域变钝了:)
2ekbmq323#
以这种方式检查referer有助于防范Cross-site request forgery。
理想情况下,你会希望有一种方法,使推荐人检查匹配您自己的域或支付平台的域,但由于这是一个简单的子串检查,而不是模式匹配,我不认为这是可能的。
如果禁用此功能,则应采取其他措施来防范此类攻击。