pulpul 日本の試験

システムアーキテクト 概念書 · セキュリティ

Webアプリケーションの脆弱性対策

Webアプリケーションの脆弱性対策とは、利用者の入力や外部から届く値を、プログラムの命令やWebページの構成要素として解釈させないように、設計・実装・運用の各段階で防ぐ取組みである。代表的な攻撃はSQLインジェクション、OSコマンドインジェクション、クロスサイトスクリプティングであり、いずれも入力値が本来のデータの範囲を超えて扱われることで成立する。

入力値が命令として解釈される仕組み

Webアプリケーションは、フォームやURLで受け取った文字列をデータベースへの問合せやOSのコマンドに組み込んで処理することが多い。この組立ての際に入力値が構文の一部として扱われると、攻撃者は本来のデータの範囲を超えて命令を送り込める。利用者の入力に含まれる区切り記号がそのままシェルに渡されると、意図しないOSコマンドが実行されるおそれがある。シェルを起動する言語機能を使う実装では、利用者の入力がコマンドとして解釈される危険が生じるため、その実装を避けることがOSコマンドインジェクションへの基本的な対策になる。

インジェクション攻撃への対策

データベースへの問合せを組み立てる際に、入力値を構文と分けてデータとして扱うプレースホルダを使うと、入力内容がSQL文の構造として解釈されることを防げる。 プレースホルダは入力を命令の一部にしないため、SQLインジェクションを防ぐ有効な方法である。 ただし、プレースホルダはSQLの問合せに対する対策であり、OSコマンドインジェクションへの対策を示すものではない。 Webアプリケーションからシェルを起動させない対策は、OSコマンドインジェクションへの対策として別に位置づけて考える必要がある。 ファイルを直接参照させない対策は、ディレクトリトラバーサルなど別の脆弱性への対策であり、XSSを防ぐ方法ではない。

クロスサイトスクリプティングの仕組みと種類

クロスサイトスクリプティング(XSS)は、悪意あるJavaScriptなどのスクリプトをWebページに混入させ、そのページを閲覧した利用者のブラウザで実行させる攻撃である。典型的な手口は、Webアプリケーションのフォームの入力欄に悪意あるスクリプトを含むデータを入力し、それが画面に出力されることである。

攻撃者が掲示板などにスクリプトを含む書込みを行い、その内容がサーバに保存されて、後に閲覧した利用者のブラウザで実行される方式は格納型XSSと呼ばれる。 格納型では攻撃コードがサーバに保存される点が、他の方式との大きな違いである。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む