確認.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からどのように保護できますか?