подтвердить.php
<?php session_start(); $token= md5(uniqid()); $_SESSION['delete_customer_token']= $token; session_write_close(); ?> <form method="post" action="confirm_save.php"> <input type="hidden" name="token" value="<?php echo $token; ?>" /> Do you really want to delete? <input type="submit" value=" Yes " /> <input type="button" value=" No " onclick="history.go(-1);" />
confirm_save.php
<?php
session_start();
$token= $_SESSION['delete_customer_token'];
unset($_SESSION['delete_customer_token']);
session_write_close();
if ($_POST['token']==$token) {
// delete the record
} else {
// log potential CSRF attack.
}
?>
Допустим, у нас есть типичная защита от CSRF, подобная этой. Что, если атакующий использует этот код для обхода токена csrf?
//On any site
<img src="http://cia.teletubbies.com/csrf.php" height="0" weight="0"/>
//csrf.php
$cont = get_file_contents("http://cia.google.com/confirm.php");
// parse the html using [PHP Simple HTML DOM Parser][2] and get the CSRF token
//CURL and send a POST request to confirm_save.php with the token
Эта штука продолжает беспокоить меня, но я слишком ленив, чтобы пытаться атаковать любой случайный сайт. Разве это не возможно?
Код примера был украден из предотвращения csrf в php
Обновлено
Что происходит, когда кто-то хочет передать токен с одной платформы на другую или со стороны сервера на сторону клиента? Например, Flash to PHP, как его защитить от csrf?