36

従来の ASP アプリを SQL インジェクションから保護する強力な方法は何ですか?

参考までに、アクセスDBで使用しています。(私はアプリを書きませんでした)

4

8 に答える 8

28

ストアド プロシージャおよび/または準備済みステートメント:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

単一引用符をエスケープし、ユーザー入力を単一引用符で囲むことにより、SQL インジェクションから保護できますか?

SQL インジェクションやその他の悪意のある Web リクエストの捕捉

Access DBならまだできますが、SQLインジェクションが気になる方はとにかくAccessをやめたほうがいいと思います。

アクセスのテクニックへのリンクは次のとおりです。

http://www.asp101.com/samples/storedqueries.asp

インジェクションから通常保護されるのは、ストアド プロシージャ自体ではなく、パラメータ化されていて動的ではないという事実であることに注意してください。動的コードを構築する SP でさえ、特定の方法でパラメーターを使用して動的コードを構築すると、インジェクションに対して脆弱になる可能性があることに注意してください。全体として、私は SP を好みます。SP は、アプリケーションがデータベースに到達するインターフェイス レイヤーを形成するためです。そのため、そもそもアプリが任意のコードを実行することさえ許可されていません。

さらに、コマンドとパラメーターを使用しない場合、ストアド プロシージャの実行ポイントが脆弱になる可能性があります。たとえば、これは動的に構築され、インジェクション ターゲットになる可能性があるため、依然として脆弱です。

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;

データベースは独自の境界を防御する必要があることに注意してください。さまざまなログインがINSERT/UPDATE/DELETEテーブルへの権限を持っている場合、それらのアプリケーション (または侵害されたアプリケーション) のコードが潜在的な問題になる可能性があります。ログインがストアド プロシージャを実行する権限のみを持っている場合、これはファネルを形成し、正しい動作をより簡単に確認できます。(オブジェクトがそのインターフェースを担当し、すべての内部動作を公開しない OO の概念に似ています。)

于 2008-09-29T17:50:34.297 に答える
10

これは、私がかなり前に単純バージョンと拡張バージョンを作成した sqlinject スクリプトのいくつかです。

function SQLInject(strWords) 
dim badChars, newChars, i
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") 
newChars = strWords 
for i = 0 to uBound(badChars) 
newChars = replace(newChars, badChars(i), "") 
next 
newChars = newChars 
newChars= replace(newChars, "'", "''")
newChars= replace(newChars, " ", "")
newChars= replace(newChars, "'", "|")
newChars= replace(newChars, "|", "''")
newChars= replace(newChars, "\""", "|")
newChars= replace(newChars, "|", "''")
SQLInject=newChars
end function 


function SQLInject2(strWords)
dim badChars, newChars, tmpChars, regEx, i
badChars = array( _
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _
"updatetext", "writetext", "reconfigure", _
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(") 
newChars = strWords
for i = 0 to uBound(badChars)
Set regEx = New RegExp
regEx.Pattern = badChars(i)
regEx.IgnoreCase = True
regEx.Global = True
newChars = regEx.Replace(newChars, "")
Set regEx = nothing
next
newChars = replace(newChars, "'", "''")
SqlInject2 = newChars
end function
于 2011-08-09T11:59:34.673 に答える
4

「古典的なASPアプリのSQLインジェクションから保護する強力な方法」は、すべての入力を容赦なく検証することです。限目。

ストアド プロシージャだけや別のデータベース システムを使用するだけでは、必ずしも優れたセキュリティとは言えません。

MS は最近、クエリで使用される未検証の入力を探す SQL インジェクション インスペクション ツールを発表しました。それがあなたが探しているべきものです。

リンクは次 のとおりです: Microsoft Source Code Analyzer for SQL Injection ツールは、ASP コードの SQL インジェクションの脆弱性を見つけるために利用できます。

于 2008-10-04T19:34:23.013 に答える
4

パラメーター化されたクエリを使用して、コマンド オブジェクトを作成し、名前と値をパラメーターに割り当てる必要があります。そうすれば、他に何も心配する必要はありません (もちろん SQL インジェクションを参照してください;))

http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html

また、ストアド プロシージャを信用しないでください。プリペアド ステートメントを使用しないと、ストアド プロシージャも攻撃ベクトルになる可能性があります。

于 2008-09-29T17:50:54.997 に答える
1

ストアド プロシージャがオプションでない場合 (たとえオプションであっても)、すべての入力を徹底的に検証します。

于 2008-09-29T19:44:05.867 に答える
1

ねえ、それを使用する開発者と同じくらい優れたデータベース。

それ以上でもそれ以下でもありません。

優れた開発者であれば、テキスト ファイルをデータベースとして使用して e コマース サイトを構築できます。はい、オラクル主導のウェブサイトほど良くはありませんが、ホームベースのカスタムジュエリー製造のような小規模ビジネスには十分です.

また、優れた開発者であれば、ASP ページでインライン SQL ステートメントを使用することはありません。Access でも、クエリを作成して使用するオプションがあります。

SQL インジェクション攻撃を防ぐ最善の方法は、データ検証を使用したスト​​ア プロシージャと html エンコードです。

于 2011-02-21T21:51:53.910 に答える
0

Microsoft Source Code Analyzer for SQL Injection ツールを使用して、ASP コードのSQL インジェクションの脆弱性を見つけることができます

于 2009-07-21T10:01:31.750 に答える
-2

少なくとも SQL Express への切り替えは優れたオプションです。それは物事をより安全にします。ただし、パラメーターとストアド プロシージャを使用すると非常に役立ちます。入力を慎重に検証して、期待どおりのものであることを確認することもお勧めします。

数値のような値の場合、数値を抽出してそれが実際に単なる数値であることを確認するのはかなり簡単です。SQL のすべての特殊文字をエスケープします。これを行うと、試みられた攻撃が機能しなくなります。

于 2008-09-29T19:49:05.103 に答える