PHP初心者の方に向けた基本的なセキュリティ対策のPART1です。
何かあればコメントで
- Part1 ここ
- Part2 まだ
- Part3 まだ
初めに
皆さんは、XSS(クロスサイトスクリプティング)という言葉を聞いたことがあるでしょうか。
簡単に言えば、サイトに不正なHTMLタグ等を仕込む攻撃です
XSSを受けると
- cookieの漏洩
- セッションハイジャック
- 機能の不正利用
- webページ改ざん
等の被害が考えられます
かなり深刻度が高いですね。
では、どのようにすればこの攻撃を防げるのかを解説します。
※追記(2023年8月14日)
投稿から1年弱が立ってSQLファイルのダウンロードができない状況に気が付きましたので直しておきました。
まずXSSをやってみる
はい、まずはやってみないことにはどのような攻撃かわかりにくいと思うので
私のXAMPPで実行していきたいと思います。
参考までに私のPCスペックとXAMPP環境を下に掲載しておきますね
- PC:Windows10
- CPU:Corei7 8700
- PHP: PHP8.0.13
- MySQL(MariaDB):10.4.22-MariaDB
あと、今回の実験では以下のプログラムを使います
PDOも使うのでMySQLの用意も忘れずに
(ただしこのプログラムを使わないのなら必要ありません。)
SQL
では、まずこんな感じの掲示板があるとします(上の奴です)


んで、ここにこんな感じのコードをでかいテキストボックスに入れて投稿します
<script> alert("XSS"); </script>
そうするとなんと…


不正なスクリプトが実行されてしまいましたー!
今回はテストのためにただのalertですが、これがセッション情報を抜き出したりする
JavaScriptとか、不正にデータを取得するphpタグだったりしたら恐ろしいですね
では、次は対策方法について解説します。
対策方法
じつは簡単です
まず以下のコードをプログラムの一番上(<?phpの下)
に入力します。
function xss($text){
return htmlspecialchars($text, ENT_QUOTES);
}
そして次に、XSSされそうなとこに以下の要素を追加します
(例)
echo xss($xss_text);
今回のプログラムで言えば、14行目の
$text = filter_input(INPUT_POST, 'text');
ですね
ではこのコードを以下のように修正します
$text = xss(filter_input(INPUT_POST, 'text'));
これだけで対策は終了です。
(ただこの手段だと、過去に書き込まれたものは対策されないので表示するところに対策したほうがいいかもです。)
んで、このコードを加えたうえで
<script> alert("XSS"); </script>
をかきこむと…


この通り、無事対策されましたね!
あ、仕組みを解説し忘れてたので今ここで書くと
<を <
“を "
のように変えています
まとめ
今回はXSS(クロスサイトスクリプティング)の対策方法について解説しました!
次回はSQLインジェクションをやろうと思います。
ここまで読んでいただきありがとうございます。
コメント