• <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利用HttpModule實現防sql注入

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

    asp.net利用HttpModule實現防sql注入

    asp.net利用HttpModule實現防sql注入:1、新建一個類,實現IHttpModule接口 代碼 代碼如下:public class SqlHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.AcquireRequestSta
    推薦度:
    導讀asp.net利用HttpModule實現防sql注入:1、新建一個類,實現IHttpModule接口 代碼 代碼如下:public class SqlHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.AcquireRequestSta

    1、新建一個類,實現IHttpModule接口
    代碼
    代碼如下:

    public class SqlHttpModule : IHttpModule
    {
    public void Dispose()
    {
    }
    public void Init(HttpApplication context)
    {
    context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
    }
    }

    在實現接口的Init方法時,我們選擇了AcquireRequestState事件,為什么不是Begin_Request事件呢?這是因為我們在處理的時候可能用的session,而Begin_Request事件執行的時候還沒有加載session狀態(關于HttpModule可以參考這一篇)。
    2、對網站提交的數據進行處理
    (1)、GET方式
    代碼
    代碼如下:

    //url提交數據 get方式
    if (context.Request.QueryString != null)
    {
    for (int i = 0; i < context.Request.QueryString.Count; i++)
    {
    key = context.Request.QueryString.Keys[i];
    value = context.Server.UrlDecode(context.Request.QueryString[key]);
    if (!FilterSql(value))
    {
    throw new Exception("QueryString(GET) including dangerous sql key word!");
    }
    }
    }

    (2)、POST方式
    代碼
    代碼如下:

    //表單提交數據 post方式
    if (context.Request.Form != null)
    {
    for (int i = 0; i < context.Request.Form.Count; i++)
    {
    key = context.Request.Form.Keys[i];
    if (key == "__VIEWSTATE") continue;
    value = context.Server.HtmlDecode(context.Request.Form[i]);
    if (!FilterSql(value))
    {
    throw new Exception("Request.Form(POST) including dangerous sql key word!");
    }
    }
    }

    完整代碼:
    代碼
    代碼如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Text;
    namespace DotNet.Common.WebForm
    {
    /// <summary>
    /// 簡單防止sql注入
    /// </summary>
    public class SqlHttpModule : IHttpModule
    {
    public void Dispose()
    {
    }
    public void Init(HttpApplication context)
    {
    context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
    }
    /// <summary>
    /// 處理sql注入
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void context_AcquireRequestState(object sender, EventArgs e)
    {
    HttpContext context = ((HttpApplication)sender).Context;
    try
    {
    string key = string.Empty;
    string value = string.Empty;
    //url提交數據 get方式
    if (context.Request.QueryString != null)
    {
    for (int i = 0; i < context.Request.QueryString.Count; i++)
    {
    key = context.Request.QueryString.Keys[i];
    value = context.Server.UrlDecode(context.Request.QueryString[key]);
    if (!FilterSql(value))
    {
    throw new Exception("QueryString(GET) including dangerous sql key word!");
    }
    }
    }
    //表單提交數據 post方式
    if (context.Request.Form != null)
    {
    for (int i = 0; i < context.Request.Form.Count; i++)
    {
    key = context.Request.Form.Keys[i];
    if (key == "__VIEWSTATE") continue;
    value = context.Server.HtmlDecode(context.Request.Form[i]);
    if (!FilterSql(value))
    {
    throw new Exception("Request.Form(POST) including dangerous sql key word!");
    }
    }
    }
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }
    /// <summary>
    /// 過濾非法關鍵字,這個可以按照項目靈活配置
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    private bool FilterSql(string key)
    {
    bool flag = true;
    try
    {
    if (!string.IsNullOrEmpty(key))
    {
    //一般配置在公共的文件中,如xml文件,txt文本等等
    string sqlStr = "insert |delete |select |update |exec |varchar |drop |creat |declare |truncate |cursor |begin |open|<-- |--> ";
    string[] sqlStrArr = sqlStr.Split('|');
    foreach (string strChild in sqlStrArr)
    {
    if (key.ToUpper().IndexOf(strChild.ToUpper()) != -1)
    {
    flag = false;
    break;
    }
    }
    }
    }
    catch
    {
    flag = false;
    }
    return flag;
    }
    }
    }

    3、在web項目中應用
    只要在web.config的httpModules節點下面添加如下配置即可。
    <httpModules>
    <add name="SqlHttpModule" type="DotNet.Common.WebForm.SqlHttpModule, DotNet.Common.WebForm"></add>
    </httpModules>
    需要說明的是,這個防止sql注入的方法在特定的小項目中還是很簡潔高效的,但是不通用,通常我們都是選擇參數化(利用orm或者ado.net的參數化)方式防止sql注入。
    附:asp.net在網頁頭部引入js腳本的簡單方法
    asp.net開發少不了JavaScript的輔助。在通常項目中,js文件都組織在一個公共目錄如js文件夾下。隨著項目的深入,你會發現js腳本文件越來越多,公共的腳步庫越來越龐大。實際使用的時候,我們通常都是在頁面中通過 <script src="..." type="text/javascript" >形式引入js文件,而且引入的越來越多。下面我們就來簡單討論在每個頁面引入公共腳本庫的統一方式,而不用每個頁面都是很多<script src="..." type="text/javascript" >的形式。
    和我們以前的做法一樣,定義一個頁面基類叫BasePage,事件和方法如下:
    Code
    代碼如下:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Reflection;
    using System.Text;
    using System.IO;
    namespace DotNet.Common.WebForm
    {
    using DotNet.Common.Model;
    using DotNet.Common.Util;
    public class BasePage : System.Web.UI.Page
    {
    public BasePage()
    {
    }
    protected override void OnInit(EventArgs e)
    {
    base.OnInit(e);
    AddHeaderJs();//向網頁頭部添加js等文件
    }
    #region 網頁頭添加通用統一js文件
    private void AddHeaderJs()
    {
    string jsPath = "~/js/";
    string filePath = Server.MapPath(jsPath);
    Literal lit = new Literal();
    StringBuilder sb = new StringBuilder();
    if (!Directory.Exists(filePath))
    throw new Exception("路徑不存在");
    List<string> listJs = new List<string>();
    foreach (var item in Directory.GetFiles(filePath, "*.js", SearchOption.TopDirectoryOnly))
    {
    listJs.Add(Path.GetFileName(item));
    }
    foreach (var jsname in listJs)
    {
    sb.Append(ScriptInclude(jsPath + jsname));
    }
    lit.Text = sb.ToString();
    Header.Controls.AddAt(1, lit);
    }
    private string ResolveHeaderUrl(string relativeUrl)
    {
    string url = null;
    if (string.IsNullOrEmpty(relativeUrl))
    {
    url = string.Empty;
    }
    else if (!relativeUrl.StartsWith("~"))
    {
    url = relativeUrl;
    }
    else
    {
    var basePath = HttpContext.Current.Request.ApplicationPath;
    url = basePath + relativeUrl.Substring(1);
    url = url.Replace("http://", "/");
    }
    return url;
    }
    private string ScriptInclude(string url)
    {
    if (string.IsNullOrEmpty(url))
    throw new Exception("路徑不存在");
    string path = ResolveHeaderUrl(url);
    return string.Format(@"<script src='{0}' type='text/javascript'></script>", path);
    }
    #endregion
    }
    }

    這樣就簡單地解決了引入公共js的問題。同樣的原理,你也可以引入其他類型的文件,如css等。
    demo下載

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

    文檔

    asp.net利用HttpModule實現防sql注入

    asp.net利用HttpModule實現防sql注入:1、新建一個類,實現IHttpModule接口 代碼 代碼如下:public class SqlHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.AcquireRequestSta
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品毛片a∨一区二区三区| 亚洲级αV无码毛片久久精品| 久久久久久极精品久久久| 青青青青久久精品国产h| 国产午夜福利精品久久2021| 色妞ww精品视频7777| 精品久久久久香蕉网| 久久国产香蕉一区精品| 日本五区在线不卡精品| 在线精品亚洲| 久久亚洲精品成人AV| 精品久久久久久亚洲| 国产福利电影一区二区三区,亚洲国模精品一区 | 国产精品毛片无遮挡| 奇米影视7777久久精品| 精品人妻无码专区中文字幕| 老司机99精品99| 99国产精品永久免费视频| 91精品视频在线| 欧美国产成人久久精品| 亚洲国产精品18久久久久久| 精品国产综合区久久久久久| 亚洲精品无码Av人在线观看国产| 国产精品午夜一级毛片密呀 | 国产精品区一区二区三在线播放| 亚洲日韩精品A∨片无码| 国产精品嫩草影院AV| 亚洲国产精品福利片在线观看 | 欧美日韩国产成人高清视频,欧美日韩在线精品一| 欧美日韩精品乱国产538| 99RE6热在线精品视频观看| 国产精品香港三级国产AV| 久久永久免费人妻精品下载| 亚洲精品美女久久777777| 伊人久久精品影院| 中国精品18videosex性中国| 国产精品久久网| 国产精品性爱| 人妻精品久久无码区 | 国产福利电影一区二区三区,亚洲国模精品一区 | 国产三级精品三级在线观看专1 |