ティアのホームページ☆ミ:ID 618:タイトル WEBの耐性 oC
no prev page 1/1ページ(1件) no next page
To Close..WEBの耐性 2010年06月14日17時14分
ここのサイトは、自作の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のエスケープコードを実行してしまうかもしれません。


コレは、言わば、悪用するコードを作ろうとする人と、ある程度のコードは使える様にしたままで、それ以外のは使わせないようにと、あらゆる手段で、悪意有るコードがないか探す側の戦いなのです。

で、どうすればいいのか分からないわけです(笑

まぁ、色々試しずつって感じでしょうか?
閉じる
テーマ:日記 URL:https://tsukiyori.sakura.ne.jp/index_m.cgi?ID=618
 
no prev page 1/1ページ(1件) no next page