1

テキストボックスに問題があります。

  1. ユーザーがテキストボックスに何かを書き込むと、それは保存されますが、SQLクエリや不正なテキスト、またはデータベースに自動的に挿入された何かが、何が起こっているのかわかりませんでした。誤ったデータをデータベースに保存します。

  2. SQLはテキストのフォーマットによって自動的に挿入されたと思います。

誰かが私にこれに対する解決策を提供できますか?

特殊文字のテキストボックスを制限することはできません。そのため、多くの問題に直面しています。

4

2 に答える 2

3

Textbox をフィルタリングできない場合は、 Postback でデータをフィルタリングする必要があります。

  • Server.HtmlEncode (ここにテキスト)を使用して、SQL インジェクションに通常使用される文字をエスケープします。

string userInput = @"' または 1=1; -- ";

文字列encodedString = Server.HtmlEncode(userInput);

結果は次のようになります。

' or 1=1; -- <html>
  • 正規表現を使用して、無効な文字をスペースなどに置き換えて、文字が置き換えられたことを示します (* を使用):
Regex myRegex = new Regex("[\\\'\\\"\\<\\>=]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
string userInput = @"' or 1=1; -- <html>";
string encodedString = myRegex.Replace(userInput, "");

結果は次のようになります。

または11; --html

  • SQL クエリでパラメーターを使用し、追加する前に値を検証します。

using (SqlConnection cn = new SqlConnection("接続文字列はこちら")) {

            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = cn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "Select * From [User] Where (UserName = @UserName AND Password = @Password)";
                cmd.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = Server.HtmlEncode(txtUserName.Text);
                cmd.Parameters.Add("@Password", SqlDbType.NVarChar).Value = Server.HtmlEncode(txtPassword.Text);
                cn.Open();
                IDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    // Your code here
                }
            }
        }
  • ユーザーが指定されたテキスト ボックスに入力できる内容を制御するためのオプションを使用して、すぐに使用できるカスタム コントロールがあります。
  • Web プログラミングの最後のアドバイスは、(1- JavaScript を使用するクライアント側) と (2- 疑いと懸念の独自のルールを使用するサーバー側) を再確認する必要があります。
于 2012-09-05T07:56:18.233 に答える
0

可能な解決策:

  1. 機密データを暗号化します。

  2. 必要最小限の権限を持つアカウントを使用してデータベースにアクセスします。

  3. 必要最小限の権限を持つアカウントを使用してデータベースをインストールします。

  4. データが有効であることを確認してください。

  5. コード レビューを実行して、二次攻撃の可能性をチェックします。

  6. パラメータ化されたクエリを使用します。

  7. ストアド プロシージャを使用します。

  8. ストアド プロシージャ内のデータを再検証します。

  9. アプリケーションまたはデータベースの内部アーキテクチャに関するエラー メッセージが何も表示されないことを確認してください。

詳細については、参考文献を参照してください:インジェクション攻撃と前のヒントに関するいくつかのヒント

于 2012-09-05T06:48:00.773 に答える