- ベストアンサー
getパラメータの注意点
いつも参考にさせて頂いています。 表題の件ですが、現在WEBアプリ開発中です。 getで渡したパラメータを 「select … where A = ?」という形でpreparedstatmentを使って検索しています。 (?の箇所にパラメータが入ります) こういう仕組みのWEBアプリで注意すべき点(セキュリティ面又は品質において)はありますでしょうか? どんな小さいことでも結構ですので、教授宜しくお願いします。 ■開発環境■ eclipse 3.1 struts 1.2.9 mysql
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
だいぶ前にやったので、とりあえずセキュリティ面について覚えていることだけ。 一番重要なのは、「SQLインジェクション」と呼ばれる攻撃への対処です。GETのパラメータは偽装できます。偽装されたパラメータ内に意図的にコードを含ませることで、予想していない形でのデータベースアクセスを実行させ、IDやパスワードを盗んだりする攻撃です。 これへの対策は、第1にMySQLでの特殊記号をエスケープすること。特にクオート関係のエスケープは重要です。また数値関係の値は、受け取った値を明示的にキャストすることで問題を防ぐのに役立ちます。 また、あわせて「NULLバイト攻撃」への対処も必要でしょう。これはリクエストパラメータに%00を含めることでセキュリティチェックをすり抜けるものです。これをSQLインジェクションと組み合わせることで、甘いSQLインジェクション対策をすり抜ける場合があるので、そのあたりも考える必要があります。 また、勘違いすることが多いんですが、GETに限らず、POSTであってもパラメータを偽装し送信することは可能です。ですから、「GETは危険だからPOSTにすれば安全」とは考えないようにしてください。 SQLインジェクション、NULLバイト攻撃で検索してみてください。いろいろ対策が見つかりますよ。その他、SQLとは無関係に、XSS攻撃対策などもWeb開発では常識ですからあわせて調べてみるとよいですよ。これも検索すれば山ほど見つかります。 品質という点は、具体的にSQLでどんな処理をしているかによるので・・・。
お礼
早速の返事ありがとうございます。 SQLインジェクションについては"'"をエスケープして"\'"で対処していますがこれだけでは不十分でしょうか? 何か他にしておいたほうがいいことなどがあれば教えてください。 宜しくお願いします。