1

現在、アポストロフィをまったく許可していません(ご覧のとおり、他の文字と一緒に)。これをフィールドごとに繰り返します。

foreach(char c in Comments)
    {
        if(c=='\'' || c=='$' || c=='\"' || c=='&' || c=='%' || c=='@' || c=='-' || c=='<' || c=='>')
        {
            errorMessage = "You have entered at least one invalid character in the \"Comments\" field. Invalid characters are: [\'], [\"], [&], [$], [@], [-], [<], [>], and [%]";
        }
    }

私はしばらくこれをコーディングしており、改善していますが、本当の問題は、ユーザー入力を効果的に「取り除く」か、そうでなければ検証する方法があると確信していますが、どれがわからないということですこのアプローチが最善であり、おそらくセキュリティ上の危機が差し迫るまではそうではないでしょう。

私がしなければならない場合は、フォームに一重引用符をまったく許可しないことに決めます (現在のように)。ただし、これにより、名前フィールドに Bill O'Reilly などという名前の人がいらいらする可能性があります。

おそらく他にも(「プラグイン?」「外部プログラム?」と呼んでいいのかわかりませんが)私のために仕事をしてくれるものがありますが、それは事実上役に立たないだけでなく、方法がわからないからです。それを統合するために、それを私のWebインターフェイス/データベースに合わせて調整する方法がわかりません。

通常のアポストロフィからSQLインジェクションアポストロフィを(おそらくそれを囲む文字で)検出するのに役立つコードはありますか?一部のフィールドは最大 500 文字 (テキストエリア) まで、1 つのフィールドは最大 1,000 文字まで保持できることに注意してください。

アイデアや助けをありがとう!

4

3 に答える 3

5

パラメーター化されたクエリほど安全な量の入力エンコーディング/クリーンアップはありません。

パラメーター化されたクエリの詳細については、 SqlCommand.Parametersを参照してください。

string commandText = "SELECT * FROM Sales WHERE CustomerID = @ID;";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);
    command.Parameters.Add("@ID", SqlDbType.Int);
    command.Parameters["@ID"].Value = customerID;
    var reader = command.ExecuteReader();
    //.....
}
于 2012-10-04T16:55:20.903 に答える
1

SQL インジェクションは、特定の文字を含む入力の問題ではなく、入力の処理方法の問題です。

特定の文字を禁止することで、SQL インジェクションを引き起こす明らかな方法を阻止できますが、それを使用して考えられるすべての方法を阻止することは事実上不可能です。

正しくエンコードされていれば、問題を引き起こす文字はありません。データベース呼び出しでこれを行う最善の方法は、パラメーター化されたクエリを使用することです。これにより、データベース ドライバーは、データ型と特定のデータベースに従って正しい文字をエンコードします。

また、HTML コードに挿入される HTML エンコーディング文字列、URL で使用される URL エンコーディング文字列 (および HTML の URL に挿入される文字列の両方) のように、後で使用するときに値を正しくエンコードする必要があります。コード。)

于 2012-10-04T16:58:18.490 に答える
1

他の人がすでに言っているように、パラメーター化されたクエリを使用して SQL インジェクションを防ぐ必要があります。

Alexei Levenkov は、ADO.NET パラメーターを使用する良い例を提供していますが、より一般的には、パラメーター処理がわずかに異なる WebMatrix Razor ページ (ASP.NET Web ページ フレームワーク) を操作するときにデータベース ヘルパーを使用します。Database.Queryメソッド( Query(string commandText, params object[] parameters) は、実行する SQL を表す文字列と、SQL に渡されるパラメーター値を表すオブジェクトの配列を取ります。データベース ヘルパーは、パラメーター マーカーを想定しています。 @0 から開始し、毎回 1 ずつインクリメントします。

var sql = "SELECT * From MyTable WHERE TheDate > @0 AND ID > @1";

次に、次の方法で実際の値を渡します。

var data = Database.Open("MyDb").Query(sql, Request["date"], Request["id"]);

内部的には、Database クラスが値をプレースホルダーに一致させ、ADO.NET パラメーターを作成します。

于 2012-10-05T07:05:34.770 に答える