- - PR -
ASP.NETにおけるXSS、SQLインジェクション対策
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-08 19:07
ここまで読んだところでは、入力チェックもまともにやっていないように思えます。 SQLインジェクションに対しては、多少手間がかかってもパラメータクエリを使うように 変更したほうが早いと思います。
もしやるのであれば、既に書いたように「画面から入力」されないhiddenパラメータや リンクに指定されるパラメータを含め、全リクエストパラメータに対して実施してください。 でないと意味がありません。 XSS対策としては、出力文字列に対してHtmlEncode/URLEncodeでサニタイジングすることで 通常は対応できます。画面数が多いと大変ですけどね。 | ||||||||||||||||||||
|
投稿日時: 2006-02-08 19:33
「CODE=" & 1」って? このダブルクォーテーションは、何を意味していますか? & 1 は、何を意味していますか? 「それでも」って? DataRow 経由でやっているのだから、SQL Injection の対象にならない、とでも? とりあえずつくって、シングルクォーテーションを含む文字列を入力したらどうなるか、やってみれば? 「Where句の値が画面から入力される事はありません」って? でも、更新のための値は、画面から入力されますよね?そこは対象外ですか? 「セカンドオーダー SQL インジェクション」は、調べましたか?これに使われる値は、直接はデータベースから持ってきた値ですよ。 「今更パラメタライズドクエリにするのは無理です。」 パラメータを使わないなら、すべての“使用前”に、特殊文字を無効化するコードを挿入しなければなりません。同じことじゃないですか? 別の言い方をすれば、設計からバグっています。設計まで戻って直さなければなりません。→じゃぁ、どうすりゃいいのさ 〆 written by Jitta on 2006/02/08 8レスしかついていない頃に書いたので、時代遅れな所もありますが、ご勘弁を。 [ メッセージ編集済み 編集者: Jitta 編集日時 2006-02-08 19:34 ] | ||||||||||||||||||||
|
投稿日時: 2006-02-08 19:43
皆さんが書いているように設計思想に問題がありそうですね。
プログラムは正常系が完成して5割(場合によってはそれ以下) 異常系が通ってはじめて完成するものだと思います。 ・異常入力、・異常データ、・通信障害 もちろん故意・悪意によるものも考えられると思います。 このまま突き進んでいいのか、もう一度考え直すことをオススメします。 _________________ ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/ 日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/ | ||||||||||||||||||||
|
投稿日時: 2006-02-08 20:11
そういえば、SELECT文だけ問題にしているようですが、当然更新文でもSQLインジェクションの
対策は必要ですよ。その場合、WHERE句だけでなく、INSERT文やUPDATE文の設定値に埋め込ま れる可能性もあります。
セキュリティ面を考慮せずに実装した後で、「そういえばXXXの対策はしているのか?」と 言われて慌ててる、という状況だと思います。インターネットに公開するWebサイトでの セキュリティ対策は、小手先で対応できるものではないことだということですね。 | ||||||||||||||||||||
|
投稿日時: 2006-02-08 20:36
失礼しました。 sql="SELECT * FROM TABLE WHERE CODE=" & 変数 Com = New OracleCommand(sql, OracleConnection) ODA.SelectCommand = Com ODA.Fill(DataSet, "TABLE") って事が言いたかったのです。
Where句に使用しないのであればシングルクォーテーションを入力してもエラーになりません。
なるほど。考えもしなかったです。 パラメタライズドクエリにする事によって解決できるのですか?
画面から文字を入力できる項目も限られているので、何百と有るSQL文を全て直すよりは簡単かと思ったのですが、限定してパラメタライズドクエリに修正するのであれば可能です。
ま、そういう事ですね。 そもそもWebシステムに関して素人の集まりで開発した為、Webの基本が全くありませんでした。クラサバのシステムと言う事もあって甘く見てました。 で、稼動直前になって色々と問題が出てきまして。 | ||||||||||||||||||||
|
投稿日時: 2006-02-08 20:41
訂正: イントラのシステムと言う事もあって甘く見てました。 | ||||||||||||||||||||
|
投稿日時: 2006-02-08 20:58
ちなみに ['], [%], [_], [/], [;] などを入力されたときはどうしたいですか?
エラー?それともその値で検索 or 更新? | ||||||||||||||||||||
|
投稿日時: 2006-02-08 21:00
そうでしたっけ? 単純に考えて、次のような SQL 文が出来ると思います。 SELECT * FROM table WHERE NAME = '入力'文字列' エラーになると思いますけど? # っつうか、SQL Injection の説明って、WHERE 句にはいる文字列で説明されているような? |