# 2020/12/7 upper layer progress # 項目 (徳丸本p.97~p.117) ●4−1 Webアプリケーションの機能と脆弱性の対応 ・Webアプリケーションでよく用いられるスクリプト出力と、混入しやすい脆弱性の例 ・インジェクション系脆弱性 ・まとめ(1) ●4−2 入力処理とセキュリティ ・Webアプリケーションの入力では何をするか ・入力値検証の目的 ・まとめ(2) # Webアプリケーションでよく用いられるスクリプト出力と、混入しやすい脆弱性の例 ・HTMLの出力(クロスサイト・スクリプティング) ・HTTPヘッダの出力(HTTPヘッダ・インジェクション) ・SQL分の呼び出し(発行)(SQLインジェクション) ・シェルコマンドの呼び出し(OSコマンド・インジェクション) ・メールヘッダおよび本文の出力(メールヘッダ・インジェクション) # インジェクション系脆弱性 SQLインジェクション脆弱性が発生する原因は、もともと「データ」を想定しているところにシングルクォート「'」を使ってデータ部分を終わらせ、SQL部分の構造を変化させたところにある。 この原理は他のインジェクション系脆弱性でも同じ。 # まとめ(1) この章は脆弱性の発生箇所と脆弱性の種類の関連性について学んだ。また、「出力」で発生する脆弱性は、インジェクションと呼ばれる共通の原理で発生する。 # Webアプリケーションの「入力」では何をするか 入力処理では、入力値に対して以下の処理を行う。 ・文字エンコーディングの妥当性検証 ・文字エンコーディングの変換(必要な場合のみ) ・入力値(パラメータ文字列)の妥当性検証 # 入力値検証の目的 ・入力値の間違えを早期に発見して再入力を促すことにより、ユーザビリティ(使いやすさ)を向上する ・間違った処理を継続することによるデータの不整合などを防ぎ、システムの信頼性を向上させる。 # まとめ(2) Webアプリケーションの入り口では、入力の文字エンコーディング検証と変換、入力値のチェックを実施する。これらは、セキュリティに対する根本対策ではないが、プラットフォームやアプリケーションに潜在的な脆弱性があった場合のセーフティネットとして作用する場合がある。