SQLデータベースは、一般的にデータを格納するために使用されています。例えば - あなたのアプリケーションは、データベース内のユーザプロファイル情報を格納することができます。あんたは、生のユーザ入力を使用してコード内のインラインSQLまたはその他のデータベースクエリを作成していないし、データベースに直接送信ありません。上で見たように、この動作は、災害のためのレシピです。
たとえば - 次のインラインSQLの例のようなコードを作成しないでください。
文字列のuserName =場合、Request.QueryString [ " ユーザー名" ]; // ユーザーは用心からの入力を受け取ります! ... 文字列のクエリ= " [DBO] SELECT * FROM [ユーザー]のuserName = ' " + userNameに+ " ' " ;
ここでCONCATENATEテキスト文字列が一緒に、ユーザからの入力を取得し、ユーザーを検索するには、動的SQLクエリを生成し、クエリを作成します。悪意のあるユーザーが、我々はこれをやって、あるいは単にして実現した場合に再度、 試してみました 脆弱性があったかどうかを確認するために、異なる入力スタイルを、私たちは、大規模災害で終わることができました。代わりに、使用はこのようなSQL文またはストアドプロシージャをパラメータ化:
- 検索ユーザーは、 CREATE PROCEDURE sp_findUserを ( @UserNameの VARCHAR(50 ) ) SELECT * FROM [ DBO ]。[ ユーザー] WHEREのuserName = @UserName
この方法で、あなたはそれを渡し、安全にあなたのコードからプロシージャを呼び出すことができ userName
、それがSQL文の一部として扱われる心配をせずに文字列を。