2016-09-12 2 views
0

Я хочу отключить CSRF токен безопасности на моем Silverstripe для определенного IP.Silverstripe: отключить CSRF для определенного IP

Я знаю, что для конкретной форме это может быть сделано с помощью

$form = new Form(..); 
$form->disableSecurityToken(); 

Но я хочу сделать это сайт мудрым.

У меня есть другой сайт, размещенный на другом компьютере, который делает запрос ajax для входа в silverstripe, используя XSLT и ajax. Поэтому я хочу отключить CSRF для этого конкретного IP-адреса.

Может ли кто-нибудь мне помочь? Благодаря

ответ

5

Вы можете проверить $_SERVER для удаленного IP:

$ip = '192.168.1.99'; 

if ($_SERVER['REMOTE_ADDR'] == $ip) { 
    $form->disableSecurityToken(); 
} 

Это может работать, если вызов Ajax производится другой сервер, если это сделано в браузере IP всегда отличается.

EDIT:

, если вы хотите, чтобы отключить защиту маркера во всем мире вы можете использовать либо

SecurityToken::disable(); 

или подключите Extension класс Controller с магическим методом securityTokenEnabled() который возвращает ложь. Конечно, специальный подкласс контроллера может перезаписать это. См. source.

+0

Могу ли я использовать его в mysite/_config.php, я хочу отключить его сайт для всех форм не только одной формы. – WatsMyName

+0

я отредактировал ответ – wmk

+1

'SecurityToken :: disable();' похоже, что он будет работать. http://api.silverstripe.org/3.0/class-SecurityToken.html#_disable –