防SQL注入的要點
作者: 來源: 發(fā)布時間:2011-6-2 9:51:26 點擊:
所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊.下面給大家分享教你如何防止SQL注入攻擊的,希望對大家有幫助。
防SQL 注入是一個系統(tǒng)工程,在項目開發(fā)中就要系統(tǒng)的考慮SQL 注入的問題。一般做到以下4點,能比較好的控制SQL 注入:
- 嚴格驗證用戶的一切輸入,包括URL參數(shù)。
- 將用戶登錄名稱、密碼等數(shù)據(jù)加密保存
- 不要用拼接字符串的方式來生成SQL語句,而是用SQL Parameters 傳參數(shù)或者用存儲過程來查詢
- 嚴格驗證上傳文件的后綴,exe、aspx、asp等可執(zhí)行程序禁止上傳。
這里介紹一個簡單通用的方法,用來驗證字符串中是否有敏感字符,參數(shù)可以是一個字符串,也可以是一個字符串集合,敏感字符可以在Lawlesses數(shù)組中定義:
- public static string[] Lawlesses = { "=", "'" };
- /// <summary>
- /// 敏感字符檢測
- /// </summary>
- /// <param name="args"></param>
- /// <returns></returns>
- public static bool CheckParams(params object[] args)
- {
- if (Lawlesses == null || Lawlesses.Length <= 0) return true;
- //構(gòu)造正則表達式,例:Lawlesses是=號和'號,則正則表達式為 .*[=}'].*
- //另外,由于我是想做通用而且容易修改的函數(shù),所以多了一步由字符數(shù)組到正則表達式,實際使用中,直接寫正則表達式亦可;
- string str_Regex = ".*[";
- for (int i = 0; i < Lawlesses.Length - 1; i++)
- {
- str_Regex += Lawlesses[i] + "|";
- }
- str_Regex += Lawlesses[Lawlesses.Length - 1] + "].*";
- //
- foreach (object arg in args)
- {
- if (arg is string)//如果是字符串,直接檢查
- {
- if (Regex.Matches(arg.ToString(), str_Regex).Count > 0)
- return false;
- }
- else if (arg is ICollection)//如果是一個集合,則檢查集合內(nèi)元素是否字符串,是字符串,就進行檢查
- {
- foreach (object obj in (ICollection)arg)
- {
- if (obj is string)
- {
- if (Regex.Matches(obj.ToString(), str_Regex).Count > 0)
- return false;
- }
- }
[收藏此文章]
- 1. 防SQL注入的要點
本類熱門
本類推薦
本站熱門
東坡下載 & 分享互聯(lián)網(wǎng) Copyright(C) 2008-2010 sfsensi.com All Rights Reserved! 網(wǎng)站備案/許可證號:京ICP備10000128號-1