CSRF@PHP技術
CSRF攻撃についてです。
CSRF攻撃とは、サイトにJSを仕込んでリダイレクトさせることでユーザーの意図にかかわらず操作(掲示板に書き込みなど)させる攻撃です。
初めて知った攻撃手法です。
- CSRF攻撃側
まず、先の掲示板を使います。
攻撃対象は掲示板の削除機能です。
削除機能はidとpassを指定し実行すると、指定したidのレスが削除される仕組みです。
では、実際のコードを見てみます
まず、HTMLに以下のコードを書きます。
idが14番目のレスを削除するようにできています。
<body onload="document.csrf1.submit();"> <form action="http://localhost/2-1.php" method="post" name="csrf1"> <input type="hidden" name="id" value="14" /> <input type="hidden" name="pass" value="aaaa" /> <input type="hidden" name="delete" value="1" /> </form>
現在の掲示板は対象の14番目のレスがあります。
ここから、上記のHTMLにアクセスすると・・・
勝手に削除されてしまいました。
このように、JavaScriptを仕込むことで勝手にフォーム内容を送信してしまうことがCSRF攻撃のコワイところです。
これを利用すれば別ユーザーになりすました上でおかしな投稿ができたり、折角投稿したレスが勝手に削除されたりされます。
- CSRF防御側
これに対応するには、最も簡単な方法でリファラーチェックがあります。
具体的なコードは以下のようになります。
$myuri = 'http://localhost/2-2.php' ; if ( strncmp( @$_SERVER['HTTP_REFERER'] , $myuri , strlen($myuri) ) ) { unset( $_POST ) ; }