Friday, August 24, 2007

セキュアプログラミング

WEB セキュアプログラミング

古くからEDPやシステム運用や開発をなされて来た方なら、驚かずに読んでいただけるでしょう。WEBシステム、携帯サイトのシステムというのは、本質的にかなりの危険を含んでいます。不特定多数の人間にDBの更新を伴うオペレーションを当たり前のように許可していますが、一昔前のシステムであれば、DBの更新などは、少なくともその組織の中の人間しかありえないと特定できましたが、今はそんなご時世ではありません。

セキィリティの問題は、運用するネットワークやサーバの管理者だけで解決できるものではありません。実は開発者サイドで留意しておくべきことがいくつかあります。ある程度の規模をもつシステム会社さんだと、ちゃんと意識して開発していらっしゃいますが、時々、社内の若い担当者が少しCGIの勉強をして作ったんじゃないだろうかと思えるようなサイトも見受けられます。
もしこれを読んでいる方の中に、サーバ運用担当、システム導入担当の方がいらっしゃいましたら、現在、管理しているサイトのプログラムについて、一度確認をされることをお勧めします。以下の項目は、言語に依存しない事項で、ソースを見なければわからないこともありますが、ブラウザからわかることもあります。

・入力データのチェックをクライアント側スクリプトに頼っていない。
   -->ユーザの利便性を求め、JavaScriptを多用するサイトで見受けます。
・全ての入力データからHTMLタグとなりうる文字「<」「>」を取り除いている。
   -->100% NGではありませんが、許可する場合は、
     相当な例外コードが必要です。
     意識して十分な予算と開発期間をとりましたか?
・HTMLにデータを埋め込む際には必ずHTMLエンコーディング
  (「<」「>」「&」「"」「'」→「<」「>」「&」「"」「'」の置き換え)
   をしている。
   -->詳細仕様の議論の際に話題になければ
     省略されている可能性があります。
・保護が必要な全てのページにユーザ認証機構を組み込んでいる。
   -->WEBに不慣れなシステム会社が時々やります。
・事前に推定可能なセッションIDを用いていない。
   -->やはりWEBに不慣れなシステム会社が時々やります。
     また逆にWEBしか経験のないSOHO系のエンジニアが時々やります。
・重要なデータのキーをURLのクエリストリングで受け渡していない。
   -->100% NGではありませんが、やる場合は熟慮が必要です。
     弊社でも、他サイトのシステムとのI/Fのため
     (先方のミドルウエアの仕様)でやむを得ずやったことがありますが、
     最低限キーをジャミングする必要があります。
・hiddenフィールドでデータを受け渡していない。
   -->100% NGではありませんが、やむを得ずやる場合は、
     クライアントからの値を信用しないことを前提としたサーバサイドの
     コーディングが必要です。

このコラムでは割愛しますが、チェックすべき項目は、その他、DB周りのコーディング、それぞれの言語に依存した項目にも、重要な事柄があります。
IPAのガイドライン等には、一度は目を通し、開発パートナの選択や社内開発に際に、留意いただくべきかと思います。

No comments: