1. 程式人生 > >C#防SQL注入程式碼的三種方法

C#防SQL注入程式碼的三種方法

對於網站的安全性,是每個網站開發者和運營者最關心的問題。網站一旦出現漏洞,那勢必將造成很大的損失。為了提高網站的安全性,首先網站要防注入,最重要的是伺服器的安全設施要做到位。

下面說下網站防注入的幾點要素。
  一:丟棄SQL語句直接拼接,雖然這個寫起來很快很方便。
  二:如果用SQL語句,那就使用引數化,新增引數。
  三:儘可能的使用儲存過程,安全效能高而且處理速度也快。
  四:遮蔽SQL,JavaScript等注入(很是主要的),對於每個檔案寫是不太可能的。
  
所以要找到對所有檔案起作用的辦法。我在網上收集了以下3種方法

C#防SQL注入方法一

在Web.config檔案下面增加一個如下標籤:

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

其中key是 < saveParameters>後面的值為”OrderId-int32”等,其中”-“前面表示引數的名稱比如:OrderId,後面的int32表示資料型別。

C#防SQL注入方法二

在Global.asax中增加下面一段:

protected void Application_BeginRequest(Object sender, EventArgs e){
  String
[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString()。Split',');   forint 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注入方法三

使用字串過濾類

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
  }
  }

相關推薦

C#SQL注入程式碼方法

對於網站的安全性,是每個網站開發者和運營者最關心的問題。網站一旦出現漏洞,那勢必將造成很大的損失。為了提高網站的安全性,首先網站要防注入,最重要的是伺服器的安全設施要做到位。 下面說下網站防注入的幾點要素。   一:丟棄SQL語句直接拼接,雖然這個寫起來很快

C#裡面比較時間大小方法

DateTime t1 = new DateTime(100); DateTime t2 = new DateTime(20); if (DateTime.Compare(t1, t2) > 0) Console

PHP實現防止SQL注入的2方法

PHP簡單實現防止SQL注入的方法,結合例項形式分析了PHP防止SQL注入的常用操作技巧與注意事項,PHP原始碼備有詳盡註釋便於理解,需要的朋友可以參考下!   方法一:execute代入引數 $var_Value) { //獲取POST陣列最大值 $num = $nu

spring 注入方法

  自己總結下  比較淺的 理解 適合 初學者:   1.構造方法 注入          直接上程式碼   <!-- 構造方法注入 --> <bean id="testservice" class="com.javen.service.im

C語言 數值交換的方法

一、程式設計思想 (1)通過建立第三個變數來交換數值; (2)不建立變數,通過加減的方式交換(PS:如果倆個數值過大,則可能會溢位) (3)不建立變數,通過異或操作符交換(最高效簡潔,不會溢位,是1、2的升級) ——異或的思想 將數值以ASCII碼的形式,按二進

java防止SQL注入的兩方法

1.採用預編譯語句集,它內建了處理SQL注入的能力,只要使用它的setString方法傳值即可: String sql= "select * from users where username=? and password=?; PreparedStatement

C# 中使用using的方法

1.using指令using+名稱空間,這種方法基本學習過C#的都用過,好處在於,寫程式碼的時候不需要指定詳細的名稱空間using System.Windows.Media; using System.Windows.Media.Imaging;2.using語句是用來簡化資源釋放的,在一定的範圍內有效,除了

Windows下c++獲取系統時間的方法

1、CTime類的static介面GetCurrentTime() 包含的標頭檔案#include <atltime.h> CTime類的物件表示的時間是基於格林威治標準時間(GMT)的。 CTime表示的日期上限是3000年12月31日,下限是1970年1月1

防止SQL注入的五方法

一、SQL注入簡介     SQL注入是比較常見的網路攻擊方式之一,它不是利用作業系統的BUG來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過SQL語句,實現無帳號登入,甚至篡改資料庫。 二、SQL注入攻擊的總體思路 1.尋找到SQL注入的位置 2.判斷伺服器型別和後臺資料庫型別 3.針對不通的伺服器和

好用的aspSQL注入程式碼

在連線資料庫的下方加入程式碼就可以防止sql注入了:<%dim sql_injdata,SQL_inj,SQL_Get,SQL_Data,Sql_Post SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|m

ASP SQL注入的兩函式

Function SafeRequest(ParaName,ParaType) '--- 傳入引數 --- 'ParaName:引數名稱-字元型 'ParaType:引數型別-數字型(1表示以上引數是數字,0表示以上引數為字元) Dim ParaValue ParaValu

C#實現字元替換的方法

最簡單粗暴的方法 C#封裝了Replace的方法,這個方法及其它的引數是這樣的。 string Replace(替換的目標,替換的字串) 返回值是替換後的字串 string str = "11xx1111x"; Console.Wri

angular4 服務依賴注入方法

假設有服務authservice,現在要把它注入到我們的元件中。有下列三種方法。 方法一:最簡單直接,直接生產一個該服務的例項物件。 import { Component, OnInit } fro

C# List去重的方法(轉)

sta string duplicate lambda表達式 nts linq pac distinct fontsize 三種去重的方法 1、List中的元素實現IEquatabe接口,並提供Equals方法和GetHashCode方法。 2、使用表達式 [csha

vc++ 向其他程序注入程式碼方法

導言: 我們在Code project(www.codeproject.com)上可以找到許多密碼間諜程式(譯者注:那些可以看到別的程式中密碼框內容的軟體),他們都依賴於Windows鉤子技術。要實現這個還有其他的方法嗎?有!但是,首先,讓我們簡單回顧一下我們要實現的目標,以便你能弄清楚我在說什麼。 要讀取一

c# pictureBox1.Image的獲得圖片路徑的方法 winform

相對 body req () ebr art www ref clas 代碼如下:c# pictureBox1.Image的獲得圖片路徑的三種方法 winform 1.絕對路徑:this.pictureBox2.Image=Image.FromFile("D:\\00

C#學習筆記(12)——方法操作XML

結點 記得 ext 應用程序 eval 資源 特性 pla cells 說明(2017-7-11 16:56:13): 原文地址: C#中常用的幾種讀取XML文件的方法 XML文件是一種常用的文件格式,例如WinForm裏面的app.config以及Web程序中的web.c

C語言創建符號常量的方法;printf()和scanf()函數

c1、#indefine pi 3.1415926形式的宏定義2、const int MONTHS=12;這使得MONTHS成為一個只讀值。3、enum 枚舉類型4、printf()和scanf()函數使我們能夠與程序通信,他們被稱為輸入/輸出函數,(I/O函數)5、字符串、浮點數輸出的類型及介紹:實例程序:

C語言方法調用數組

技術 png 順序 特性 logs 元素 %d img etc 1 #include <stdio.h> 2 /********************************* 3 * 方法1: 第一維的長度可以不指定 * 4 * 但必須指定第二

C#實現發送郵件的方法

thumbnail catch plugins () listbox 幫助 哈希 .text sbo 本文實例講述了C#實現發送郵件的三種方法。分享給大家供大家參考。具體方法分析如下: 一、問題: 最近公司由於一個R&I;項目的需要,用戶要求在購買產品或出貨等