ログログ

雑学プログラマが学んだことの記録

プログラミング PHP

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

投稿日:

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。

対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限とサニタイジング(スクリプトの無害化)です。

入力値制限

POST/GET送信する入力フィールドの値を制限することで、スクリプト入力ができないようにする対策です。
・数値のみ
・文字数制限
・記号の不許可
によって制限することができます。

サニタイジング(スクリプトの無害化)

画面への表示時にスクリプトが埋め込まれている場合に、タグ等をエスケープして文字列として扱うことで、スクリプトが実行されないようにする対策です。
これは、htmlspecialchars関数で実装します。
例)

入力値制限されているのに、なぜスクリプトが埋め込まれる可能性があるのか?
それは、すべての入力フィールドで上記すべての入力値制限を設定できないケースでは入り込む余地があります。
例えば、ブログ記事の本文は数値と記号も入りますし、文字数が数文字程度に制限はできません。

ではすべての項目にhtmlspecialchars関数を設定しないといけないのかというとそうでもないです。
htmlspecialcharsは文字数が多いため、ラッパー関数として以下のようにすることが一般的です。
※ラッパーとはラップ(包み込む)の人称形です。

Laravel(PHPフレームワーク)では、{{}}と変数を囲むだけでエスケープ処理されます。

まとめ

・入力値制限でスクリプトが入力される可能性を排除する。
・htmlspecialchars関数でスクリプトの実行を無害化できる。
・htmlspecialchars関数はラッパー関数にして使用することが一般的である。
・Laravelフレームワークでは{{}}でエスケープ可能である。

-プログラミング, PHP
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

pageEncodingとcontentTypeのcharsetの違い

pageEncodingとcontentTypeのcharsetは処理されるタイミングが異なります。 それによって文字化けの原因につながっているので、どのように設定すればいいかを解説していきます。 目 …

VBAが書けるまでにどのくらいかかったか?

これからVBAを学ぼうとしている人向けに参考情報として書きます。 目次 前提結論3か月くらいAPIのツール作成何で勉強したか?Office TANAKAエクセルの神髄書籍最後に 前提 前提として、私の …

no image

PHPの開発環境の作り方

目次 前提準備構築XAMPPのインストールインストール開始64bit版OSの場合に表示される警告インストール開始コンポーネントの選択インストールパスの設定追加でインストール可能なWebアプリケーション …

MySQL-タイムゾーン設定すると起動しなくなる原因と対処方法

MySQLのタイムゾーン設定をすると、XAMPPでMySQLが起動できなる原因と対処法です。   目次 原因XAMPP起動時に表示されるエラーメッセージ対処方法timezonesをダウンロー …

no image

prepareステートメントの挙動について調べてみた

目次 調べるきっかけ調べたコード 調べるきっかけ PHPでSQLをセキュアに記述する方法としてprepareステートメントが推奨されているが、なぜなのかがわからず、挙動を調べれば自分なりに納得のいく答 …