トップ «前の日記(2006-11-29) 最新 次の日記(2006-12-12)» 編集

"週"記

日記?ムリっ。
半年1回の更新を目指すよう心がけます。
RSS

WebAppSec

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|03|04|05|06|07|08|09|12|
2008|01|02|
2009|04|
2010|02|

履歴


2006-11-30

_ [webappsec] エスケープだけしてれば、セキュリティ対策が万全になる訳ではないですよ

select password from usertable where id = 入力値 (idが数値型)
入力値に 1 or 1 = 1 が与えられると・・・
といった攻撃を防ぐことは出来ません。このケースでは、前もって入力値が数値型であることを確認しておかなければなりません。

違いますよね。数値かどうかはDBがチェックすべきものでしょう。それをしてくれないのだとしても、最初から入力値を「'」で括っときゃいいんです。 <input type="hidden" value=入力値> を防ぐことはできません、って言ってるのと同じじゃないですか?
入力値の数値チェックをしなくていいわけじゃないけど、入力値チェックを組み込む手間と、「'」を2つ追記する手間を考えたら、どっちが簡単で美しい対策かわかりますよね。

ライブラリなどの下位層で全ての問題が解決出来ることが理想ですが、残念ながら現状はそうではありません。それぞれの層における責務と出来ること出来ないことを正しく認識し、対策を行う必要があります。

これはそう思います。 こんなことされたら、下位層じゃどうにもならんでしょう。

_ [etc] 原稿

先程送りました。17時くらいに催促のメール頂いてましたが、みなしじゃない今日中に送ったので勘弁してください。

参考: 一般人理解不能…ここまでズレてる「エンジニア時間」

本日のツッコミ(全7件) [ツッコミを入れる]
_ masa (2006-11-30 14:24)

数値型のフィールドもシングルクォートで括っておけばよいってことでしょか?それはちょっとやりたくないです。

_ bun (2006-11-30 14:25)

なぜ?

_ masa (2006-11-30 19:02)

やったことがないからです

_ はるぷ (2006-11-30 19:52)

intを期待しているところに対して、文字列をそのまま入れて、DBにエラーを吐かせて、そこからエラーハンドリングするってことでしょうか?<br>個人的には、型が指定されている関数には、型を揃えてから入れるってやり方をしてたので、いまいちピンとこないです。<br>DBあまり詳しくないのでよくわかりませんです。よかったら教えてくださいです。

_ はるぷ (2006-11-30 20:55)

と、思いましたが、美しい美しくないはよくわからないので↑の話はやっぱり無しで。

_ bun (2006-11-30 21:02)

エラーとか型の話じゃなくて、シングルクオートで括ってあげれば他と同じように下位層の機能が使えるよね、って話です。その方が美しい(主観)と思うし、場合によっていろいろな種類の対策を組み込むよりミスが少ないと思います。

_ masa (2006-11-30 23:20)

数値型もシングルクォートで括れるってことを正直知らなかったので、それで対応可能なのであれば、そんなセキュリティの対策もありかなーとは思います。(正常系の動作に副作用を与えないという前提があるならば)<br>ただ、綺麗なコーディング(主観)を実際に行うならば、根本的なチェックをDB側で行うなんて、ちょっと考えられません、保険レベルの話なら分かりますけれど。<br>データベースへのアクセスを制御するクラスには、DTOなどと呼ばれるオブジェクトをあらかじめ作成してメソッドの引数として渡します。このオブジェクトはint型とかString型とかのフィールドを持っているので、オブジェクトを生成する段階で、型変換は終わっています。データベースへのアクセスクラスへ渡すオブジェクトの生成はデータベース層では行わないので、ものすごく違和感を感じます。

お名前:
E-mail:
コメント:

投稿する前にチェックボックスをチェックしてください


無料アクセス解析