XSS問題(攻撃)について、備忘録としてまとめていこうと思います。
#XSS問題(攻撃)とは
XSS(クロスサイトスクリプティング)問題(攻撃)とは、アプリケーション製作者の意図とは別に第三者がJavaScriptコードを埋め込むことで、リンクへのクリックなどによるページ遷移等のコードが読み込まれたタイミングで、保存のCookieを取得させることにより個人情報が漏洩する問題のことを指します。安全性の低いWebサイト等で別ページへ遷移する際に全く関係のない偽ページへ飛ぶ、個人情報が抜き取られるなどは、このXSSによる攻撃であるケースが1つとして考えられ、アプリケーション制作の際に最も対処が必要な問題の1つです。
#解決策
###1,エスケープする
HTML特殊文字( < , > , " など)を実体参照(HTML エンティティ)に置換することをエスケープと言います。
このエスケープをするためには、htmlspecialchars関数を使います。
function h($str) {
$message = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
###2,コード全体構造
上のコードを実際にHTML内に書き込んだ場合このようになります。
<!DOCTYPE html>
<html lang = "ja">
<head><meta charset = "UFT-8">
<title>XSS対策</title>
</head>
<body>
<form action = "index.php" method = "get">
<input type = "text" name ="message"><br/>
<a href="javascript:alert('Test')">Test</a><br/>
<input type="checkbox" name="hoby[]" value="musicappreciation">音楽鑑賞<br/>
<input type="checkbox" name="hoby[]" value="moviegoing">映画鑑賞<br/>
<input type="checkbox" name="hoby[]" value="reading">読書<br/>
<input type="checkbox" name="hoby[]" value="fishing">釣り<br/>
<input type="checkbox" name="hoby[]" value="message">マッサージ<br/>
<input type = "submit" value ="submit">
<?php
// HTML特殊文字をエスケープする
function h($str){
$message = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
echo h($_GET['message']);
echo "<br>";
?>
</form>
</body>
</html>
以上が説明になります。
正直まだ理解が浅く拙い箇所が多々ありますが、今後理解が深まったら編集で追記していこうと思います。
自分が直面したことに対しどのように解決したかの自分なりに噛み砕いて解釈した備忘録的要素が強いため、
ここの理解が間違っているというような指摘がある場合ぜひいただきたいです。
#参考HPサイト
・XSSの概要:
https://www.ipa.go.jp/security/vuln/websecurity-HTML-1_5.html
↑リンク先のページ冒頭部にある構図がXSSは何かを理解する上でわかりやすかったです。
・実際の対策:
https://qiita.com/mpyw/items/565b3670dd0c7f9162fa
https://tech-lab.sios.jp/archives/21780