ここのサイトは、自作のCGIで動いていますから、何か不具合が有れば、自分のせいと言う事になるので、そのあたり、色々気にはしているのですが、
結構気になるあたりなのはコレ
SQLインジェクション
たとえば、ここには、記事を検索する機能が有ります。
もしここに、SQL文を埋め込んだ人が居た場合、それがどうなるかというのです。
たとえば
SELECT xx from yy where zz=入力された文字;
と安易な処理をしていた場合
入力された文字列が
あ;何かやらかしたいSQL文
で有った場合、
yyテーブルからzz=あのテーブルを探して、xx列を返した後に
「何かやらかしたいSQL文」を続けて実行してしまうわけです。
一般的には文字列は”で区切ってSQL文が作成されるため
「あ”;悪意有るSQL文」と打つとか 「)」でwhereを区切っている場合に逢わせて
「あ”);悪意有るSQL文」とうつとか・・・まぁこのあたりは、可能性とパターンの数でしかないわけで、多少複雑なSQL文であったとしても、いつかは、意図しないSQL文が実行されてしまうわけです。
なので、それを防ぐ方法として、一番簡素なのが、入力された文字の中で"を見つけたら消してしまう方法です。
where句に"で囲って引き渡しているのであれば、"が途中に入らなければ、悪意有る行動は起きないはずです。
でも、それにもまして、いかがわしい動作もあります。
それがエスケープコードと言われる物です。
一般的なプログラム言語では¥nと書くと、コレを改行コードとして処理します。
¥Hと書くとBackSpaceと同じ動作になります。
もし、エスケープコードを実行してしまう状態の場合、一番先頭にコレを書けば、
「where = "入力された文字"」としてwhere句を作るところ「where = 入力された文字"」となってしまいます。なので「¥H123;悪意有るSQL文」と入力した場合、先頭の"を削除され、好きなコードを実行される可能性があります。
まぁ、SQLの作成におけるエスケープコードの利用を制限すればいいのですが、まぁこれらの対策も、言ってしまえば、いたちごっこなのです。
"を削除するのであれば¥”Hと打てば、”を削除された後に¥Hのエスケープコードを実行してしまうかもしれません。
コレは、言わば、悪用するコードを作ろうとする人と、ある程度のコードは使える様にしたままで、それ以外のは使わせないようにと、あらゆる手段で、悪意有るコードがないか探す側の戦いなのです。
で、どうすればいいのか分からないわけです(笑
まぁ、色々試しずつって感じでしょうか? |