まとめ
これまで述べてきたように、Unicode を使用するシステムでセキュアな実装を行うのは簡単ではありません。
以下に、注意点をまとめておきます。
- 各層での文字の扱いを把握・統一する
- 文字列を検査するライブラリ関数などと、ファイルシステムやデータベースなどでの文字列の扱いに差異がないようにしましょう。
- 最終的に利用される文字コードに変換したときのことを意識する
- 内部コードとしてUnicodeを使用するのであれば、最終的に非Unicodeに変換された時点で、害を与える文字列に変換されないように意識しましょう。
- 危険な文字列の検出ではなく、安全な文字列との一致を検査する
- デフォルトセキュアの原則に従い、入力された文字列に危険な文字列を含んでいないかを検査するのではなく、入力された文字列が安全かどうかを検査するような実装にしましょう。
これらは、あくまでも最低限守るべきラインであり、実際の実装においてはより慎重にコーディングを進める必要があるのではないかと思います。Unicode が必ずしも必要というわけではないアプリケーションならば、Shift_JIS や EUC-JP を利用するというのも、セキュアな実装へのひとつの手段かも知れません。
長々と述べてきましたが、間違いや不明点、提案その他がありましたら、是非 openmyaML に投げていただければ幸いです。
(終り)