- ベストアンサー
サニタイジングの重要性とは?
- WEBアプリケーションの開発において、サニタイジングは非常に重要な役割を果たします。
- データベースへの検索機能がある場合、ユーザーが入力した検索キーによって悪意のある攻撃を受ける可能性があります。
- サニタイジングを行うことで、不正な入力値からの攻撃を防ぎ、システムのセキュリティを強化することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> 現在作成している画面にはデータベースへの検索機能があるので > 検索キーを入力することが出来ます。 > テキスト入力欄が一つ、セレクトボックスが一つあります。 つまり、検索条件となる文字列を入力できるということですよね? これは、2パターンのサニタイズを行う必要がある場合があります。 入力できる文字数ははっきり言ってあまりアテにはなりませんね。 また、セレクトボックスなどから受け取る値も、選択肢以外来るはずがないという 考えから、完全に信用することも良くありません。 1つめは、DB操作を行う観点から・・・ 実際内部処理としては、検索文字列を利用してSQLを組み立てるはずです。 この時、プリペアドステートメントを利用したSQL発行方法を取っているなら 問題ありません。 文字列連結を行ってSQLを発行しているような仕組みの場合、そこに 『意図しないSQL文を発行させる文字列』が入っていたら、不正な挙動を 起こす為、DB問合せを行うタイミングで『DB問合せの為のサニタイズ』が必要です。 これは、いわゆる『SQLインジェクション』という脆弱性に対する対応です。 2つめは、表示を行う観点から・・・ 検索結果時に、検索した文字列を表示させるような場合、質問内に 記されいる通り、ブラウザが解釈できる全てのスクリプトが動作して しまいます。 それはJavaScriptに限った話ではありません。 その場合は、表示を行うタイミングで『表示の為のサニタイズ』が必要です。 これは、いわゆる『クロスサイトスクリプティング』という脆弱性に対する対応です。 これが悪用され、『クロスサイトリクエストフォージェリ』という脆弱性にも繋がります。 DBから見た時、Webページから見た時のいずれもですが、『外的要因によって 動的に変化する部分は常にサニタイズをする』クセは持っていて損はありません。 (要件によって例外はありますが)
お礼
>この時、プリペアドステートメントを利用したSQL発行方法を取っているなら >問題ありません。 プリペアドステートメントを使用した検索を行っています。 (特別サニタイジングを意識したわけではありませんでしたが) >表示を行うタイミングで『表示の為のサニタイズ』が必要です。 こちらはサニタイジングを行っています。 DBに特殊文字が入ることはないのですが念のために行っていました。 ご回答ありがとうございました。