セキュリティを高めるために多分一番必要な事は、システム開発者にセキュリティを意識したコーディングをさせないという事だ。
セキュリティを意識したコーディングをするのはシステム開発者の役割ではなく、システム開発者が使うであろうフレームワークやプラットフォームを作成している者の役割なのだ。
もちろん、システム開発者がセキュリティを意識しなくてもよいという事ではないし、その知識は持っておくべきである。
ただ、システムを開発している時にそれを意識してコーディングをしなくてはいけないような環境ではいけないという事だ。
例えば、HTMLをレンダリングする時に文字列をエスケープして出力する事があると思うが、こんなことシステム開発者にやらせてはいけない。
実直にあらゆる箇所にエスケープするための処理を埋め込むなんて、むしろどっかに穴ができる可能性を作っているようなものだ。
また、実際の処理とセキュリティを確保するための処理が混在してしまう事で、わかりにくいコードになってしまう可能性がある。
上記の例のようにセキュリティを意識しなくてはいけない場合、システム開発者は常に二つのことを意識してコーディングする必要がある。
一つは仕様を実装するという事。
もう一つはセキュリティを確保するという事。
このような状況だと、システム開発者が管理する項目が多くなりバグを誘発する危険性がある。
まるで、携帯電話でメールをしながら運転するようなものである。
人間は二つのことに100%注力する事はできないので、どちらかの問題が疎かになるかもしれないし、どちらもが中途半端になる可能性がある。
別の例として、
PythonのDjangoはHTMLに出力する値は規定値でエスケープ出力される。
必要な箇所でのみ、エスケープしないという設定を行う事が可能だ。
このような環境が用意されていれば、システム開発者はセキュリティを意識したコーディングをそこら中でする必要が無くなる。
エスケープをしないと決定した場所でのみ、意識すれば良い。
上記の例のようにシステム開発者がセキュリティを意識する箇所を限定的にすることで比較的一つのこと、そう仕様を実装する事だけを意識するだけでよくなる。
一つの事に注力できるので、システム開発者に余裕ができるだろうし、中途半端になる事も無いだろう。
このような、開発者にセキュリティを意識させない開発環境こそがセキュリティに明るい優秀な開発者でチームを作る事よりも大切なのではないだろうか。
ここまで記述してきた「セキュリティを意識したコーディングをさせない。」という事を一言で言えば、セキュリティを意識する必要のある範囲をできるだけ限定的にしろという事である。
つまり、
スコープは常に最小に。
という原則に基いたものである。