トップ «前の日記(2005-12-10) 最新 次の日記(2005-12-22)» 編集

"週"記

日記?ムリっ。
半年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|

履歴


2005-12-21

_ [doc] 緊急点検!Webアプリ・セキュリティ(後編)

なにやら不安なことが書いてある。

さらに,データをチェックする場所も,適切な位置に変更した。従来は,SQLインジェクションやXSSへの対策として,ユーザーからの入力データを受け取ったときにチェックしていたが,それでは不適切だった。改修後は, SQL インジェクションについては「SQL文をデータベースに渡す直前」,XSSについては「応答ページを生成する直前」に,それぞれチェックするようにした。

入力値のチェックは、「ユーザーからの入力データを受け取ったとき」で正解だったんじゃないですかね?使う直前でチェックにしてしまうと、

  • Cookie発行する直前で入力値チェック
  • メール送信する直前で入力値チェック
  • 文字列連結する直前で入力値チェック
  • 足し算に使う直前で入力値チェック

とか、同じ入力値に対して何度も何度もチェックしなきゃいけなくなるんですが、私なら漏れなくチェックできる自信ないです。
せっかくチェック機能の一元化したなら、入力値を受け取った直後にチェックを行ったほうが漏れが少なくなるでしょう。

「仮に,内部犯がアプリケーションを介さずにデータベースのデータに直接SQL文や<script>タグを埋め込んだとしても無害化できる」(担当した技術者)

単に、ユーザ(ブラウザ)からの入力だけしか入力として認識してなくて、データベースからの入力に対する入力値チェックが抜けてただけですね。データベースを直接操作される危険を想定するなら、データベースに格納されたデータ全てを汚染されたデータとして扱い、ユーザからの入力と同様、データベースから読み込んだ直後に入力値チェックするだけです。

タイトルにあるように多層防御ってことで、チェックする箇所を「追加」ならよかったのに、「変更」したために攻撃が成功するパターンを増やしてしまっていないか心配です。

本日のツッコミ(全2件) [ツッコミを入れる]
_ たりき (2005-12-21 15:17)

他にも、<br>>レスポンス時に「<」「>」「&」「"」を「<」「>」…に置き換えるなどのサニタイジング<br>逆だ逆、てな部分があったり('A`)<br><br>サニタイズのタイミングは、出力直前がベターという認識ですが・・・<br>「ブラウザに出力するならブラウザが妙な動きをしないように」<br>「RDBMSに出力するならRDBMSが妙な動きをしないように」<br>「シェルに出力するなら以下同文」<br>「ファイルに出力するならフォーマットが壊れないように」<br>これなら出力時の一発チェックで対応できるかと。チェック箇所もチェック対象からあんまり離れずに済みますから探しやすそうだし、便利だと思われ。<br><br>入力直後にしろ出力直前にしろ、まとめてポイントになるとこでやらないと漏れてしまいそうです。

_ えっちふじた (2005-12-27 11:36)

ううっ、、、自分の認識もまちがってるかもしれない..orz<br>まちがってたらしてきしてください、、<br>(自分の認識を書いた資料はどこぞにあります、、)

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

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


無料アクセス解析