Silverstripe:禁用特定IP的CSRF

Wat*_*ame 0 silverstripe

我想CSRF在我的Silverstripe上禁用特定IP的安全令牌.

我知道可以通过特殊形式完成

$form = new Form(..);
$form->disableSecurityToken();
Run Code Online (Sandbox Code Playgroud)

但我想在网站上做到这一点.

我在另一台计算机上托管了另一个站点,该站点使用XSLT和生成一个用于silverstripe登录的ajax调用ajax.所以我想为这个特定的IP禁用站点CSRF.

谁可以帮我这个事??谢谢

wmk*_*wmk 5

您可以检查远程IP的$ _SERVER:

$ip = '192.168.1.99'; 

if ($_SERVER['REMOTE_ADDR'] == $ip) {
    $form->disableSecurityToken();
}
Run Code Online (Sandbox Code Playgroud)

如果ajax调用是由另一台服务器进行的,那么这可能有效,如果它是由浏览器创建的,那么IP总是不同的.

编辑:

如果要全局禁用安全令牌,可以使用

SecurityToken::disable();
Run Code Online (Sandbox Code Playgroud)

或者使用返回false 的magic方法将Extension类插入.当然,特殊的控制器子类可以覆盖它.见.ControllersecurityTokenEnabled()