Мы действительно защищены от CSRF? - PullRequest
5 голосов
/ 03 августа 2011

verify.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);" />

verify_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 на PHP, как его защитить от csrf?

Ответы [ 2 ]

5 голосов
/ 03 августа 2011

Вы получите токен CSRF для сеанса сервера, который вы используете для очистки страницы. Поскольку этот сеанс не является жертвой, он безопасен. (Если вы крадете сеанс пользователя, это больше не атака CSRF!)

Так что, да, если это не реализовано ужасно, вы не можете просто очистить токен CSRF и использовать его в атаке CSRF.

2 голосов
/ 03 августа 2011

Защита CSRF работает, поскольку только авторизованный пользователь может получить доступ к токену.

Ваша страница csrf.php находится в другом домене и, таким образом, не может видеть сеансовые файлы cookie для легального сайта и не попадает в CSRF.маркер.

...