プログラミング PHP

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

投稿日:

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

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

入力値制限

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

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

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

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

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

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

まとめ

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

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

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

執筆者:


comment

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

CAPTCHA


関連記事

エンジニア未経験者の転職が難しくなったので解決策を提案してみる

現状 コロナ以降、未経験者のエンジニア採用が少しずつなくなっていきました。 それまではポートフォリオを作ったり、ある程度のポテンシャルがあると判断されれば 採用されるということがあったのですが、それが …

Observerパターンってどう使うの?を考える(商品の予約)

目的 Observerパターンの使いどころとなる状況を具体例でもって理解する。   ゴール(実現すること) 商品の予約システムにおけるユーザ通知   実装する機能 ・商品を予約する …

【Java】Optionalが処理できないならデフォルト値を返そう

概要 Optionalはnullである可能性を明示的に返してくれる便利なコンテナ・オブジェクトです。 if(obj == null)… といったことをしなくてよくなったのは素晴らしいことだ …

【Java入門】Supplierの使い方まとめ

概要 Supplierとは供給者という意味です。 その名の通り、引数を取らずに戻り値を受け取ります。   基本的な使い方 Supplier<T> getメソッドによってT型の結果を受け取り …

【Java】MapをStreamで処理する方法 7選!

概要 【Java】ListをStreamで処理する方法 7選! 【Java】SetをStreamで処理する方法 7選! に続き、Map編です。 Mapをstreamで扱う場合、entrySetまたはK …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。