テキストボックスに問題があります。
ユーザーがテキストボックスに何かを書き込むと、それは保存されますが、SQLクエリや不正なテキスト、またはデータベースに自動的に挿入された何かが、何が起こっているのかわかりませんでした。誤ったデータをデータベースに保存します。
SQLはテキストのフォーマットによって自動的に挿入されたと思います。
誰かが私にこれに対する解決策を提供できますか?
特殊文字のテキストボックスを制限することはできません。そのため、多くの問題に直面しています。
テキストボックスに問題があります。
ユーザーがテキストボックスに何かを書き込むと、それは保存されますが、SQLクエリや不正なテキスト、またはデータベースに自動的に挿入された何かが、何が起こっているのかわかりませんでした。誤ったデータをデータベースに保存します。
SQLはテキストのフォーマットによって自動的に挿入されたと思います。
誰かが私にこれに対する解決策を提供できますか?
特殊文字のテキストボックスを制限することはできません。そのため、多くの問題に直面しています。
Textbox をフィルタリングできない場合は、 Postback でデータをフィルタリングする必要があります。
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
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 } } }
可能な解決策:
機密データを暗号化します。
必要最小限の権限を持つアカウントを使用してデータベースにアクセスします。
必要最小限の権限を持つアカウントを使用してデータベースをインストールします。
データが有効であることを確認してください。
コード レビューを実行して、二次攻撃の可能性をチェックします。
パラメータ化されたクエリを使用します。
ストアド プロシージャを使用します。
ストアド プロシージャ内のデータを再検証します。
アプリケーションまたはデータベースの内部アーキテクチャに関するエラー メッセージが何も表示されないことを確認してください。
詳細については、参考文献を参照してください:インジェクション攻撃と前のヒントに関するいくつかのヒント