ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

改ざん攻撃はこう防げ!Webサイトの正しい守り方(第2回)

http://itpro.nikkeibp.co.jp/article/COLUMN/20080624/309332/
第二段ですね。週刊ではなく日刊ですか、すごいなぁ。
難しいパスワードとなると脳の記憶容量の問題で覚えられないというのがあると思う。で、簡単なパスワードにしてしまうというのはありがち。
すべてにおいて難しいのが無理!と言うのであれば、リスクとの兼ね合いでリスクが高くないものはあえて特定のパターンのパスワードと言うのもありとは思う(推奨はしないけど)。パスワードが覚えられないと言うのであれば、パスワードをメモしておいて、メモを厳重に管理すると言うのも悪くはない方法(パスワードを付箋紙に書いておいてディスプレイに貼り付けると言うのはダメだよ)だとも思う。パスワードをメモしておく際に、特定のルールで記述すると言うのがよりベター。
複数のパスワードを覚えられないというのはよくあることだしね。

文字列操作と脆弱性

SQLインジェクションにしてもクロスサイトスクリプトにしても命令を示す文字列がコマンドとデータを含んでいるから起こることが多いんだよなぁと今更ながらに思う今日この頃。
脆弱性のあるアプリはデータを受け取った場合、受け取ったデータがデータなのかコマンドを含んでいるのか考慮せずにというか、受け取ったデータをそのままただのデータとして取り扱おうとする(こう書くとサニタイズ推奨してるみたいだなw)。
また、文字列をコマンドとして受け取るDBやブラウザは受け取ったコマンドが文法的に正しいかはチェックできるが、それが意図したものかどうかは判断できない。
通常、コマンドとデータが一つの文字列で表現される場合、データの区切りとかコマンドの区切り文字列がきっちり定義されている。加えて、その区切り文字列がデータとして使われる可能性があるということを考慮して、そういった場合、別の表現で区切り文字列をデータとして表現する方法も定義されているのが普通だと思う。その他特殊な意味を持つ文字列(例えば、SQLであれば%とか;とか)というのも、別の表現で特別な意味のないただのデータとして表現する方法が定義されている。
一つの文字列がコマンドとデータでできているということを考えていないと、特殊な意味を持つ文字列をデータとして取り扱いたい場合どうするかことが抜けるのかなぁと。
ま、脆弱性はコマンドとデータが混在していることだけが問題と言うわけではないんだけど・・・

と言うようなことをわかりやすく説明しないといけないかなぁと思ったり、思わなかったり・・・
てか、本当はこういうのはプログラミングの入門書とかできちんと書かなきゃいけないはずなのに書いてないんだよなぁorz