предотвращение подделки подпроса в URL-адресе

Я думаю, что понимаю 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 для стилизации кнопки, если хотите, как ссылку.