ユーザー入力値のエスケープ

ユーザーからの入力値は、どのような値が来るかはユーザー次第で全くわかりません。
基本的にユーザーの入力値はエスケープ処理を行い無害化(サニタイジング)する必要があります。

SQL, JavaScript, HTMLなどをユーザーの入力した値で使用する場合、
以下のようなインジェクションのリスクがあります。

【リスク】
・ SQL(DB操作用の言語)インジェクション
・ JavaScriptインジェクション
・ OSコマンドインジェクション

【対策】
・SQL実行時にユーザー入力値を使用する場合は、プレースホルダを利用する。

ユーザーの入力値をそのままSQLに使用すると、SQLのコードを入力された場合、データを破壊されたり、不正なデータを取得される可能性があります。
そのため、SQLのコードが入力されても無害化できるようにプレースホルダを利用します。
ただ、ユーザーの入力値か否かに関わらず、SQL文に動的に値を入れる場合は必ず、プレースホルダを利用するようにしましょう。

・ユーザー入力値をそのままコードとして実行しないようにする。
iOS/Androidの一般的な画面作成とは異なり、
例外的にHTMLやJavaScriptをアプリで使用する際は
然るべきエスケープやバリデーションを加えてインジェクション攻撃を防ぎましょう。

基本的にモバイルのネイティブアプリでインジェクション攻撃に備えるべきケースは少ないですが、それが落とし穴にもなりかねません。ユーザーの入力値を埋め込んだ状態で処理を実行する場合は必ずしかるべきエスケープ処理を加えましょう。

目次に戻る