調べたこと 第十一回
入力フォーム
例 <form method ="GET" action="kurumi.php">
お名前<input type ="text" name="chiharuname">
とあると、name のところで入力された値を受け取ることができる。
で、kurumi.phpのほうで、
<?php "亀井" .$_GET[chiharuname]. "さん"; ?>
とすると、例えば「ちはる」と入力していたら、亀井ちはるさん と表示される。
getメソッドなので、urlにも、?username=%8ER.......というふうに入力したデータが後ろに付いている表示になる。
入力値に < こんなのとか $こんなのとか を入れていいよというものにするには
HTMLエスケープをしたらいい。
<こんなのは→ &lt; という表記になる。
これをPHPでするときには、
$_GETの前に、htmlspecialchars を入力したらいい。
javascript のプログラムとして、<script>で囲まれた部分を実行できる機能があるから、もし、このHTMLエスケープをしない場合、入力フォームに<script>を入れてしまうと、ブラウザ側で実行できてしまうので、そのサイトでやり取りしている情報を盗み出すことが頭のいい人には簡単にできてしまう。
例え
- cookie情報を利用した不正アクセス(セッションハイジャック)
- HTMLタグを使った入力フォームによる情報収集
- 偽サイトを使ったフィッシング詐欺
などなど、 XSSというらしい。
エスケープしておけば、このscriptが”<script$gt;”という風になって、実行されないので安心。
↓
製作者がしないといけないこと。
- クロスサイトスクリプティングに対応したWEBアプリケーションを構築する
- WEBサーバやアプリケーションを最新の状態に保つ
- クロスサイトスクリプティングに対するフィルタ機能を持つWAFの導入
(WAF は、ウェブクライアントとウェブサーバーの間に展開されるアプリケーションセキュリティ対策であり、一般的な形式のウェブトラフィックについて、すべてのリクエストとレスポンスを詳しく検査します。異常な悪意のあるトラフィックを特定して隔離またはブロックすることで、WAF は脅威がサーバーに到達するのを効果的に防ぎます。)
POSTについて
GETと似ているけど、違う点が
1,URLの末尾にデータがつかない
2, リロードしたら再送信するか確認メッセージが表示される。