Я думаю, что понимаю CSRF и то, как использование ключей формы может предотвратить это, но это может быть полезно только для данных POST, поступающих из формы, верно? На моем веб-сайте я позволил зарегистрированным пользователям удалить некоторые элементы, нажав кнопку «Удалить», которая отправляет их delete.php? Id = {item_id}.
На delete.php Я проверяю, принадлежит ли элемент пользователю, если он это делает, чем скрипт удаляет его. Как я могу остановить другой сайт, разместив ссылку, такую как www.mysite.com/delete.php?id=3. Я понимаю, что злоумышленнику придется угадать идентификатор в моем случае.
Но в целом, как вы останавливаете CSRF для данных или данных GET в URL-адресе?
Также в чем разница между злоумышленником с использованием тега img или тега привязки для выполнения CSRF и как они связаны с данными Get и Post?
Большое спасибо заблаговременно, и я буду очень признателен за любые советы по этому поводу.
Расширяя мой комментарий,
Предполагая, что вы используете cookie / session для отслеживания входа пользователя в систему. Просто md5 снова на хэш, и пусть это будет вашим подтверждением.
if (isset($_GET['delete'] && md5($_COOKIE["PHPSESSID"])==$_GET['confirm'])) { //delete something }
Затем для HTML вы можете указать:
<a href="www.mysite.com/delete.php?id=3&confirm=<?php echo md5($_COOKIE["PHPSESSID"]);?>">Delete</a>
Отличный пример предполагаемой разницы между $_POST
и $_GET
. $_GET
должен быть для чтения данных, тогда как $_POST
следует использовать для его действия. Вместо ссылки вы можете использовать форму с одной кнопкой отправки, а ваш токен – как скрытый ввод. Вы даже можете использовать CSS
для стилизации кнопки, если хотите, как ссылку.