この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
プログラミング
›
.Net/C#
›
C#. SQLインジェクション攻撃を防ぐための.NET
眺める:
17354
|
答える:
0
[WinForm]
C#. SQLインジェクション攻撃を防ぐための.NET
[リンクをコピー]
クズども
掲載地 2015/04/19 23:32:01
|
|
|
#region 防止sql注入式攻击(可用于UI层控制)
///
/// 判断字符串中是否有SQL攻击代码
///
/// 传入用户提交数据
/// true-安全;false-有注入攻击现有;
public bool ProcessSqlStr( string inputString)
{
string SqlStr = @"
and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net +user|net
+localgroup +administrators " ;
try
{
if ((inputString != null ) && (inputString != String.Empty))
{
string str_Regex = @" \b( " + SqlStr + @" )\b " ;
Regex Regex = new Regex(str_Regex, RegexOptions.IgnoreCase);
// string s = Regex.Match(inputString).Value;
if ( true == Regex.IsMatch(inputString))
return false ;
}
}
catch
{
return false ;
}
return true ;
}
///
/// 处理用户提交的请求,校验sql注入式攻击,在页面装置时候运行
/// System.Configuration.ConfigurationSettings.AppSettings["ErrorPage"].ToString(); 为用户自定义错误页面提示地址,
/// 在Web.Config文件时里面添加一个 ErrorPage 即可
///
///
///
public void ProcessRequest()
{
try
{
string getkeys = "" ;
string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings[ " ErrorPage " ].ToString();
if (System.Web.HttpContext.Current.Request.QueryString != null )
{
for ( int i = 0 ; i < System.Web.HttpContext.Current.Request.QueryString.Count; i ++ )
{
getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys;
if ( ! ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys]))
{
System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage + " ?errmsg= " + getkeys + " 有SQL攻击嫌疑! " );
System.Web.HttpContext.Current.Response.End();
}
}
}
if (System.Web.HttpContext.Current.Request.Form != null )
{
for ( int i = 0 ; i < System.Web.HttpContext.Current.Request.Form.Count; i ++ )
{
getkeys = System.Web.HttpContext.Current.Request.Form.Keys;
if ( ! ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
{
System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage + " ?errmsg= " + getkeys + " 有SQL攻击嫌疑! " );
System.Web.HttpContext.Current.Response.End();
}
}
}
}
catch
{
// 错误处理: 处理用户提交信息!
}
}
#endregion
コードをコピーします
私たちの解決策は以下の通りです:
1. まず、UIに入力する際、SQLインジェクション攻撃を防ぐためにデータの種類と長さを制御するために、システムはインジェクション攻撃を検出する関数を提供します。インジェクション攻撃が検出されると、データは送信できません。
2. ビジネスロジック層制御:メソッド内でSQLキーワードを特定の方法でブロックし、SQLを提出する際にSQLデータベースインジェクション攻撃コードがないかデータ長を確認すること; しかし、この処理の後、マスクされた文字はUI出力時に復元されます。 したがって、システムは文字を遮蔽する機能と文字を復元する機能を提供します。
3. データアクセス層では、ほとんどのデータがストアドプロシージャによってアクセスされ、ストアドプロシージャのパラメータは呼び出し時にアクセスされるため、インジェクション攻撃も防げます。
先の:
パフォーマンス最適化 ASP.NET カスタムファイルキャッシュを構築しましょう
次に:
c#および asp.net SQLインジェクションフィルタリングメソッドを防止します
関連記事
•
.NET/C# は .NET SDK と .NET CLI テレメトリをオフにします
•
. NET6における優先度キュー
•
ASP.NET Core(32)はKeyedServicesの鍵サービスの注入に依存しています
•
Nginxリバースプロキシ ASP.NET コアはUDS通信を使用します
•
.NET/C# 依存注入サービス登録 Scrutor ツール
•
[ターン]。 NET/C#はどのようにしてインスタンスがどれだけのメモリを占有しているかを計算しているのですか?
•
フロントエンドフレームワークはComponent-Partyオープンソースプロジェクトを学習します
•
.NET/C# はオブジェクト(クラスインスタンス)内の文字列の非空文字列をデスペース化します。
•
.NET/C# 正規表現 正規表現マッチング抽出
•
.NET/C# メソッド ImplOptions.AggressiveInlining パフォーマンス最適化
閲覧したセクション
ごみ箱
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com