5

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

firm_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

このことは私を悩ませ続けますが、私は怠惰すぎてランダムなサイトへの攻撃を試みることができません。これは可能ではありませんか?

サンプルコードは、phpでcsrfを防ぐために盗まれました

更新しました

誰かがトークンをあるプラットフォームから別のプラットフォームに、またはサーバー側からクライアント側に渡したい場合はどうなりますか?たとえば、FlashをPHPに変換しますが、csrfからどのように保護できますか?

4

2 に答える 2

5

ページのスクレイピングに使用しているサーバーのセッションのCSRF トークンを取得します。そのセッションは被害者のものではないため、安全です。(ユーザーのセッションを盗んでいる場合、それはもはや CSRF 攻撃ではありません!)

したがって、そうです、ひどく実装されない限り、CSRF トークンをスクレイピングして CSRF 攻撃に使用することはできません。

于 2011-08-03T16:04:13.120 に答える
2

認証されたユーザーのみがトークンにアクセスできるため、CSRF 保護が機能します。

あなたの csrf.php ページは別のドメインにあるため、正当なサイトのセッション Cookie を見ることも、CSRF トークンに到達することもできません。

于 2011-08-03T16:03:06.517 に答える