インジェクション攻撃
インジェクション攻撃を防ぐために、以下に挙げるような安全な入出力処理をする必要がある。
適切に利用すれば任意の文字入力に対してセキュアであるようなAPIを用いる。パラメータ化クエリ(コンパイル済みクエリ、プリペアドステートメント、バインド変数などとも)を用いてユーザデータが解釈実行されることを防ぐことができる。加えてクライテリアAPIや類似のAPIを用いることでコマンド文字列を生成・解釈実行するという考え方から解放される。
型システムにより言語間の分離を強制する。
既知の適切な値のみをホワイトリスト化するなどの入力バリデーションを行う。
危険な文字をエスケープするなど、入力のエンコーディングを行う。例えば、PHPでは、htmlspecialchars()関数によりHTMLにおけるテキスト中の特別な文字を安全な出力にエスケープしたり、mysqli::real_escape_string()関数によりSQLリクエストに含まれるであろうデータを分離しSQLインジェクションを防いだりする。
出力をエンコーディングし、ウェブサイトの訪問者へのクロスサイトスクリプティング(XSS)攻撃を防ぐ。
HttpOnlyフラグを立てるとクライアントサイドのスクリプトはHTTP cookieの情報にアクセスできなくなり、ある種のXSS攻撃を防ぐことができる。
シェルのモジュールをカーネルから分離する。
SQLインジェクションについては、パラメータ化クエリ、ストアドプロシージャ、ホワイトリスト入力バリデーションなどにより、コードインジェクションの問題を緩和することができる。