2013-11-01 7 views
4

Я пытался использовать метод ключа формы для csrf protection здесь http://net.tutsplus.com/tutorials/php/secure-your-forms-with-form-keys/. Но он применяется только к одной форме на странице. Мой вопросЗащита от csrf

Пусть у меня есть форма

<form action="action.php" method="post"> 
<!-- code here --> 
</form> 

и мой PHP Я использую

<?php 
if(isset($_POST['submit']) && isset($_SESSION['user'])) 
{ 
//do something 
} 

Я уже использую session user для подтверждения он вошел в систему и и форма представленный моим сайтом, поскольку сессия была сделана на моем сайте. Должен ли я использовать метод защиты csrf?

ответ

4

Должен ли я использовать метод защиты csrf?

Да, потому что именно поэтому CSRF опасен; куки-жертвы «жертвы» неосознанно отправляются на сервер для выполнения определенного действия от имени «хакера», когда они представляют модифицированную форму на другом сайте, замаскированную симпатичной фотографией котенка (например).

Когда скрытая форма отправлена, ваш сайт не может сообщить запрос отдельно от его законного, поскольку аутентификация будет действительна. Добавление маркера CSRF гарантирует, что форма была отправлена ​​со страницы вашего сайта.

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

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

+0

Предположим, что я использую метод session, где я генерирую ключ формы и отправляю ключ на php, где он проверяется. Теперь проблема в том, что одна и та же страница открывается в двух вкладках, и я обновляю новую страницу и закрываю ее. 'Изменена переменная sesion'. Теперь, когда я отправлю форму на первой вкладке. Он всегда будет давать ошибку. Иногда пользователь делает это, открывая одну страницу на 2 вкладках. Есть ли другой безопасный метод защиты csrf? – Ace

+3

@ user2894116 - Создайте токен при создании сеанса, а не каждый раз, когда форма загружена. – Quentin

+0

@ Жаркие извинения !! , Этот метод ajax требует много кода, поскольку у меня на моей странице много форм. Есть ли другой способ с меньшим кодом и одинаковой безопасностью? – Ace

Смежные вопросы