C#SQL注入防止コードの3つの方法

5993 ワード

Webサイトのセキュリティは、各Webサイトの開発者と運営者が最も関心を持っている問題です.ウェブサイトに脆弱性が現れると、大きな損失をもたらすに違いない.ウェブサイトの安全性を高めるためには、まずウェブサイトが注入を防ぐ必要があります.最も重要なのは、サーバの安全施設がしっかりしていることです.
以下にサイトの注入防止のいくつかの要素を説明します.
一:SQL文を舍てて直接つなぎ合わせて、これは书くのがとても速くて便利ですが.
二:SQL文を使用する場合は、パラメータ化を使用してParamを追加します.
3:できるだけストレージプロセスを使用して、安全性と処理速度も速い
四:SQL、javascriptなどの注入(主な)を遮断し、ファイルごとに書くことは不可能です.すべてのファイルに役立つ方法を見つけなければなりませんネットで以下の3つの方法を集めました
C#SQL注入防止方法一
Web.configファイルで、の下にラベルを追加します.
 
  
  < appSettings>

  < add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" />

  < /appSettings>


ここでkeyはの後の値が"OrderId-int 32"などであり、"-"の前にパラメータを表す名前は例えばOrderIdであり、後のint 32はデータ型を表す.
C#SQL注入防止方法2
Globalでasaxに次のセグメントを追加します.
 
  
  protected void Application_BeginRequest(Object sender, EventArgs e){

  String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString()。Split(',');

  for(int i= 0 ;i < safeParameters.Length; i++){

  String parameterName = safeParameters[i].Split('-')[0];

  String parameterType = safeParameters[i].Split('-')[1];

  isValidParameter(parameterName, parameterType);

  }

  }

  public void isValidParameter(string parameterName, string parameterType){

  string parameterValue = Request.QueryString[parameterName];

  if(parameterValue == null) return;

  if(parameterType.Equals("int32")){

  if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx");

  }

  else if (parameterType.Equals("USzip")){

  if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx");

  }

  else if (parameterType.Equals("email")){

  if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx");

  }

  }


C#SQL注入防止方法3
文字列を使用してクラスをフィルタする
 
  
  using System;

  namespace web.comm

  {

  /**//// < summary>

  /// ProcessRequest 。

  /// < /summary>

  public class ProcessRequest

  {

  public ProcessRequest()

  {

  //

  // TODO:

  //

  }


SQL注入式攻撃コード分析#region SQL注入式攻撃コード分析
 
  
  /**//// < summary>

  ///

  /// < /summary>

  public static void StartProcessRequest()

  {

  // System.Web.HttpContext.Current.Response.Write("< script>alert('dddd');< /script>");

  try

  {

  string getkeys = "";

  //string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings["CustomErrorPage"].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[i];

  if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0))

  {

  //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true");

  System.Web.HttpContext.Current.Response.Write("< script>alert(' !');history.back();< /script>");

  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[i];

  if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys],1))

  {

  //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true");

  System.Web.HttpContext.Current.Response.Write("< script>alert(' !');history.back();< /script>");

  System.Web.HttpContext.Current.Response.End();

  }

  }

  }

  }

  catch

  {

  // : !

  }

  }

  /**//// < summary>

  ///

  /// < /summary>

  /// < param name="Str"> < /param>

  /// < returns> SQL < /returns>

  private static bool ProcessSqlStr(string Str,int type)

  {

  string SqlStr;

  if(type == 1)

  SqlStr = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";

  else

  SqlStr = "'|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare";

  bool ReturnValue = true;

  try

  {

  if (Str != "")

  {

  string[] anySqlStr = SqlStr.Split('|');

  foreach (string ss in anySqlStr)

  {

  if (Str.IndexOf(ss)>=0)

  {

  ReturnValue = false;

  }

  }

  }

  }

  catch

  {

  ReturnValue = false;

  }

  return ReturnValue;

  }

  #endregion

  }

  }