CSRF Token простой способ добавления в формы в PHP

Я разработал довольно большой проект, я думал об улучшении безопасности, сохраняя токен в переменной сеанса и отправляя этот токен в каждой форме, чтобы проверить, правильно ли он предотвращает атаки CSRF.

Дело в том, что в проекте много форм и может быть мучительно и долго проходить каждую форму, чтобы добавить токен в скрытый ввод.

Поэтому я спрашивал себя, есть ли простой способ добавить это скрытое значение в каждую форму, не просматривая каждую форму? Возможно, используя jquery, я мог бы локализовать каждую форму внутри страницы, чтобы добавить скрытый ввод, а затем добавить общую функцию $_POST/$_GET для проверки любого запроса на правильность токена.

Это идея, но, вероятно, может быть другой простой и лучший способ. Есть ли простой, быстрый и достойный способ сделать это? Что было бы лучшим подходом в этой ситуации (подготовка предотвращения CSRF-атак после разработки проекта). Насколько я знаю, лучший способ предотвратить CSR-атаки — это использовать переменные токена, может быть, есть другой достойный способ сделать это без использования токена и прохождения каждой формы?


person Luis Ferrer    schedule 31.05.2015    source источник


Ответы (1)


См. здесь: Автоматически вставлять токен CSRF в все формы с JQuery.

Вы можете добавить некоторый код в функцию, встроенный в тег <script>, как показано ниже:

jQuery(document).ready(function() {
  jQuery("form").each(function() {
    var tokenElement = jQuery(document.createElement('input'));
    tokenElement.attr('type', 'hidden');
    tokenElement.attr('name', 'token');
    tokenElement.val(<?= $token ?>);
    jQuery(this).append(tokenElement);
  });
});

Это автоматически добавит серверную часть $token для включения в качестве скрытого поля формы для каждого элемента <form>.

Если вы хотите добиться этого без какой-либо обработки на стороне сервера, с дополнительным преимуществом, заключающимся в том, что весь приведенный выше код может быть включен в файл .js, вы можете сохранить токен в файле cookie и просто получить доступ к этому значению на стороне клиента (используя плагин COOKIE):

tokenElement.val($.cookie("csrftoken"));
person SilverlightFox    schedule 01.06.2015