• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    ASP.NET過濾類SqlFilter,防止SQL注入 原創

    來源:懂視網 責編:小采 時間:2020-11-27 22:37:52
    文檔

    ASP.NET過濾類SqlFilter,防止SQL注入 原創

    ASP.NET過濾類SqlFilter,防止SQL注入 原創:什么是SQL注入? 我理解的sql注入就是一些人可以通過惡意的參數輸入,讓后臺執行這段SQL,然后達到獲取數據或者破壞數據庫的目的! 舉個簡單的查詢例子,后臺sql是拼接的:select * from Test where name='+參數傳遞+';前臺頁面要求輸入name,那么黑客
    推薦度:
    導讀ASP.NET過濾類SqlFilter,防止SQL注入 原創:什么是SQL注入? 我理解的sql注入就是一些人可以通過惡意的參數輸入,讓后臺執行這段SQL,然后達到獲取數據或者破壞數據庫的目的! 舉個簡單的查詢例子,后臺sql是拼接的:select * from Test where name='+參數傳遞+';前臺頁面要求輸入name,那么黑客

    什么是SQL注入?

    我理解的sql注入就是一些人可以通過惡意的參數輸入,讓后臺執行這段SQL,然后達到獲取數據或者破壞數據庫的目的!
    舉個簡單的查詢例子,后臺sql是拼接的:select * from Test where name='+參數傳遞+';前臺頁面要求輸入name,那么黑客可以輸入: ';DROP TABLE Test;--   不要小瞧這一段SQL代碼:
    select * from Test where name=' ';DROP TABLE Test;--';在SQL中是正確的,可執行的,但是執行后整個Test表都刪除了,網站崩潰!

    最好的解決方法

    最好的辦法就是不寫拼接SQL,改用參數化SQL,推薦新項目使用。這里不做介紹,感興趣的朋友可以自行搜索一下,本文介紹的方法適合老項目,就是沒有使用參數化SQL開發的程序。

    使用過濾函數來過濾

    將SQL一些危險的關鍵字,還有注釋百分號以及分號這些根本在我們正常寫代碼的時候根本不會出現的字符都過濾掉,這樣能最大限度的保證SQL執行是安全的,代碼如下:

    public class SqlFilter
    {
     public static void Filter()
     {
     string fileter_sql = "execute,exec,select,insert,update,delete,create,drop,alter,exists,table,sysobjects,truncate,union,and,order,xor,or,mid,cast,where,asc,desc,xp_cmdshell,join,declare,nvarchar,varchar,char,sp_oacreate,wscript.shell,xp_regwrite,',%,;,--";
     try
     {
     // -----------------------防 Post 注入-----------------------
     if (HttpContext.Current.Request.Form != null)
     {
     PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
     //把 Form 屬性改為可讀寫
     isreadonly.SetValue(HttpContext.Current.Request.Form, false, null);
    
     for (int k = 0; k < System.Web.HttpContext.Current.Request.Form.Count; k++)
     {
     string getsqlkey = HttpContext.Current.Request.Form.Keys[k];
     string sqlstr = HttpContext.Current.Request.Form[getsqlkey];
     string[] replace_sqls = fileter_sql.Split(',');
     foreach (string replace_sql in replace_sqls)
     {
     sqlstr = Regex.Replace(sqlstr, replace_sql, "", RegexOptions.IgnoreCase);
     }
     HttpContext.Current.Request.Form[getsqlkey] = sqlstr;
     }
     }
    
    
     // -----------------------防 GET 注入-----------------------
     if (HttpContext.Current.Request.QueryString != null)
     {
     PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
     //把 QueryString 屬性改為可讀寫
     isreadonly.SetValue(HttpContext.Current.Request.QueryString, false, null);
    
     for (int k = 0; k < System.Web.HttpContext.Current.Request.QueryString.Count; k++)
     {
     string getsqlkey = HttpContext.Current.Request.QueryString.Keys[k];
     string sqlstr = HttpContext.Current.Request.QueryString[getsqlkey];
     string[] replace_sqls = fileter_sql.Split(',');
     foreach (string replace_sql in replace_sqls)
     {
     sqlstr = Regex.Replace(sqlstr, replace_sql, "", RegexOptions.IgnoreCase);
     }
     HttpContext.Current.Request.QueryString[getsqlkey] = sqlstr;
     }
     }
    
    
     // -----------------------防 Cookies 注入-----------------------
     if (HttpContext.Current.Request.Cookies != null)
     {
     PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
     //把 Cookies 屬性改為可讀寫
     isreadonly.SetValue(HttpContext.Current.Request.Cookies, false, null);
    
     for (int k = 0; k < System.Web.HttpContext.Current.Request.Cookies.Count; k++)
     {
     string getsqlkey = HttpContext.Current.Request.Cookies.Keys[k];
     string sqlstr = HttpContext.Current.Request.Cookies[getsqlkey].Value;
     string[] replace_sqls = fileter_sql.Split(',');
     foreach (string replace_sql in replace_sqls)
     {
     sqlstr = Regex.Replace(sqlstr, replace_sql, "", RegexOptions.IgnoreCase);
     }
     HttpContext.Current.Request.Cookies[getsqlkey].Value = sqlstr;
     }
     }
     }
     catch (Exception ex)
     {
     Console.WriteLine(ex.Message);
     }
    
     }
    
    }

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    ASP.NET過濾類SqlFilter,防止SQL注入 原創

    ASP.NET過濾類SqlFilter,防止SQL注入 原創:什么是SQL注入? 我理解的sql注入就是一些人可以通過惡意的參數輸入,讓后臺執行這段SQL,然后達到獲取數據或者破壞數據庫的目的! 舉個簡單的查詢例子,后臺sql是拼接的:select * from Test where name='+參數傳遞+';前臺頁面要求輸入name,那么黑客
    推薦度:
    標簽: 過濾 防止 sql
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久国产亚洲精品麻豆| 成人精品一区二区三区中文字幕| 久久婷婷国产综合精品| 国产精品一区三区| 2020久久精品国产免费| 亚洲国产精品无码久久久久久曰 | 久热这里只有精品12| 久久99精品久久久久久野外 | 亚洲精品成a人在线观看| 国产精品igao视频| 久久99精品国产99久久| 精品国产sm捆绑最大网免费站 | 久久久精品无码专区不卡| 青青青青久久精品国产| 国产成人精品一区二区秒拍| 无码人妻精品一区二区三区99仓本| 欧美精品一二区| 国产精品亚洲产品一区二区三区 | 国产精品一级毛片无码视频| 99久久精品国产毛片| 欧美精品一区二区三区在线| 国产精品国产三级国产专播| 成人无码精品1区2区3区免费看| 久久久久人妻精品一区二区三区| 亚洲爆乳无码精品AAA片蜜桃| 日韩精品欧美亚洲| 午夜精品久久久久久影视777| 老年人精品视频在线| 日本精品少妇一区二区三区| 精品欧美激情在线看| 精品无码人妻一区二区三区不卡| 国产在线精品一区二区不卡麻豆| 国产精品亚洲综合专区片高清久久久| 国产av无码专区亚洲国产精品| 国产AV国片精品一区二区| 国产精品性爱| 四虎精品成人免费视频| 中文字幕精品无码久久久久久3D日动漫| 亚洲国产精品嫩草影院久久| 亚洲国产精品无码专区影院| 久久99久久99精品免视看动漫|