1. 程式人生 > >ASP.NET防止SqlMap注入示例

ASP.NET防止SqlMap注入示例

第一步:在Web.config中配置

<appSettings>

    <add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" />
</appSettings> 
第二步:在Global.asaxz中新增

protected void Application_BeginRequest(Object sender, EventArgs e)

        {

            try

            {

                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);

                }

                string getkeys = "";

                string sqlErrorPage = "~/ErrorPage/index.html";

                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]))

                        {

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

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

                        }

                    }

                }

                if (System.Web.HttpContext.Current.Request.Form != null)

                {

                    if (System.Web.HttpContext.Current.Request.Url.LocalPath.ToLower().IndexOf("db_dog.aspx") < 0)

                    {

                        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]))

                            {

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

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

                            }

                        }

                    }

                }

            }

            catch

            {

                // 錯誤處理: 處理使用者提交資訊!

            }

        }

        private bool ProcessSqlStr(string Str)

        {

            bool ReturnValue = true;

            try

            {

                if (Str != "")

                {

                    string SqlStr = "select*|and'|or'|insertinto|deletefrom|altertable|createtable|createview|dropview|createindex|dropindex|createprocedure|dropprocedure|createtrigger|droptrigger|createschema|dropschema|createdomain|alterdomain|dropdomain|);|[email protected]|[email protected]|[email protected]|char(|select |and |join |backup |database |disk |exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare |drop |drop+table |creat+table |xp_cmdshell |or |tables |'";

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

                    foreach (string ss in anySqlStr)

                    {

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

                        {

                            ReturnValue = false;

                        }

                    }

                }

            }

            catch

            {

                ReturnValue = false;

            }

            return ReturnValue;

        }

        public void isValidParameter(string parameterName, string parameterType)

        {

            string sqlErrorPage = "~/ErrorPage/index.html";

            string parameterValue = Request.QueryString[parameterName];

            if (parameterValue == null) return;

            if (parameterType.Equals("int32"))

            {

                if (!parameterCheck.isInt(parameterValue))

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

            }

            else if (parameterType.Equals("double"))

            {

                //if (!parameterCheck.isDouble(parameterValue))

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

            }

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

            {

                if (!parameterCheck.isUSZip(parameterValue))

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

            }

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

            {

                if (!parameterCheck.isEmail(parameterValue))

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

            }

        }
第三步:新增類parameterCheck 

public class parameterCheck

    {

        public static bool isEmail(string emailString)

        {

            return System.Text.RegularExpressions.Regex.IsMatch(emailString, "['\\w_-]+(\\.['\\w_-]+)*@['\\w_ -] + (\\.['\\w_-]+)*\\.[a-zA-Z]{2,4}");

        }

        public static bool isInt(string intString)

        {

            return System.Text.RegularExpressions.Regex.IsMatch(intString, "^(\\d{5}-\\d{4})| (\\d{ 5})$");

        }

        public static bool isUSZip(string zipString)

        {

            return System.Text.RegularExpressions.Regex.IsMatch(zipString, "^-[0-9]+$|^[0-9] + $");

        }

【SqlMap的安裝和使用】

sqlmap防注入軟體安裝:

https://jingyan.baidu.com/article/86112f13b976e92736978749.html

sqlmap防注入案例:

https://blog.csdn.net/vala0901/article/details/71548954

sqlmap基本用法:

Sqlmap.py -u http://www.bible-history.com/subcat.php?id=2 --current-db

Sqlmap.py -u http://www.bible-history.com/subcat.php?id=2 --tables

一個sqlmap小白的第一天收穫......

相關推薦

ASP.NET防止SqlMap注入示例

第一步:在Web.config中配置 <appSettings>     <add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip"

ASP.NET WebAPI 項目示例(增刪改查)

request ctr 構建 設備 每一個 text 平臺 開發 發送數據 1.WebApi是什麽 ASP.NET Web API 是一種框架,用於輕松構建可以由多種客戶端(包括瀏覽器和移動設備)訪問的 HTTP 服務。ASP.NET Web API 是一種用於在

ASP .NET Core 基本知識點示例 目錄

源代碼 com master .html 配置 註入 git net sha ASP.NET Core 的 運行機制 文章 ASP.NET Core 中的 配置 文章 源代碼 ASP.NET Core 中的 依賴註入 文章 源代碼 ASP.NET Core 中的 日誌 文

asp.net 防止二次提交 以及UseSubmitBehavior屬性-轉

web 復制代碼 script 為什麽 pan 一個 cli 並且 註意 頁面上有一個按鈕,點擊之後提交表單,如果什麽都不管的話,用戶可以在服務器響應完成之前再次點擊,這樣就出現了二次提交,後果可大可小。 那麽我們應該防止二次點擊,就要在用戶點第一次之後馬上Disable這

ASP.NET Core依賴注入&AutoFac

1. 前言 關於IOC模式和DI技術,網上已經有很多相關的探討,再次就不過多贅述了,只是簡單介紹一下它們的概念 控制反轉(IoC/Inverse Of Control):   呼叫者將建立例項的控制權交給IOC容器,由容器建立,所以稱為控制反轉。 依賴注入(DI/Dependence

[譯]ASP.NET Core 依賴注入深入討論

這篇文章我們來深入探討 ASP.NET Core、MVC Core 中的依賴注入,我們將示範幾乎所有可能的操作把依賴項注入到元件中。 依賴注入是 ASP.NET Core 的核心,它能讓您應用程式中的元件增強可測試性,還使您的元件只依賴於能夠提供所需服務的某些元件。 舉個例子,這裡我們有一個介面和它的實現類

簡單的ASP.net防SQL注入

防sql注入是每個開發人員都要考濾的問題asp.net有個Global.asax檔案,有一個Application_BeginRequest方法(應用啟動獲取)就是當獲取到引數時觸發的事件;這裡就是網站頁面每次提交時都要經過的事件;在這裡做防注入就一下子卡住入口了程式碼如下:

ASP.NET】——SQL注入

    關於SQL注入,師父給驗收專案的時候就提過。但一直也沒深入去想是怎麼回事~~在學ASP.NET,做新聞釋出系統的時候,又遇到了,這次不能放過了~~ 定義     所謂SQL注入,就是通過把

瞭解ASP.NET Core 依賴注入,看這篇就夠了 於2017年11月6日由jesseliu釋出

var services = new ServiceCollection() .AddScoped<IOperationScoped, Operation>() .AddTransient<IOperationTransient, Operation>() .AddSingleto

ASP.net Joyrock非同步應用示例、JSON-RPC使用方法

使用Joyrock 需要先引用Jayrock.dll,Jayrock.Json.dll兩檔案,另外在web頁面引入json.js檔案(不在同一個地方下載的json.js可用不了), .net 後臺檔案 using System; using System.Collecti

ASP.net防SQL注入(簡單)

一,驗證方法  /// <summary>  ///SQL注入過濾  /// </summary>  /// <param name="InText">要過濾的字串</param>  /// <returns>如果引數存在不安全字元,則返回true

ASP.NET Core 依賴注入(DI)

  ASP.NET Core的底層設計支援和使用依賴注入。ASP.NET Core 應用程式可以利用內建的框架服務將服務注入到啟動類的方法中,並且應用程式服務也可以配置注入。由ASP.NET Core 提供的預設服務容器提供了最小功能集,並不是取代其他容器。   1.淺談依賴注入   依賴注入(Depen

ASP.NET Core 依賴注入基本用法

ASP.NET Core 依賴注入 ASP.NET Core從框架層對依賴注入提供支援。也就是說,如果你不瞭解依賴注入,將很難適應 ASP.NET Core的開發模式。本文將介紹依賴注入的基本概念,並結合程式碼演示如何在 ASP.NET Core中使用依賴注入。 什麼是依賴注入? 百度百科對於依賴注入的介紹:

深入理解ASP.NET Core依賴注入

概述        ASP.NET Core可以說是處處皆注入,本文從基礎角度理解一下原生DI容器,及介紹下怎麼使用並且如何替換官方提供的預設依賴注入容器。 什麼是依賴注入        百度百科中對於依賴注入的定義:控制反轉(Inversion of Control,縮寫為IoC),是面向物件程式設

ASP.NET Core依賴注入(DI)

ASP.NET Core允許我們指定註冊服務的生存期.服務例項將根據指定的生存時間自動處理.因此,我們無需擔心清理此依賴關係,他將由ASP.NET Core框架處理.有如下三種類型的生命週期. 關於依賴注入通俗易懂的內容大家可以看一下我上一篇文章 [.NET IoC模式依賴反轉(DIP)、控制反轉(Ioc)、

ASP.NET Core 依賴注入最佳實踐與技巧[譯]

# ASP.NET Core 依賴注入最佳實踐與技巧 > 原文地址:https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96 [正(ke)確(xue)上(shan

ASP.NET Core依賴注入初識與思考

> [文章首發地址](https://mp.weixin.qq.com/s/T1EImsoedwDy_ju9pLpbwg) # 一、前言 在上一篇中,我們講述了什麼是控制反轉(IoC)以及通過哪些方式實現的。這其中,我們明白了,**控制反轉(IoC)** 是一種軟體設計的模式,指導我們設計出更優良,更具有鬆

asp.net 360通用防護程式碼,防止sql注入與xss跨站漏洞攻擊

這是360提供的一個aspx公用程式碼,可以防止sql注入漏洞,xss跨站攻擊漏洞,如果您的網站被360掃描,出現sql注入或跨站攻擊等相關漏洞,沒有較好的解決方案,倒是可以採用該方法進下防範。 -----------------使用方法------------

AOP實踐--ASP.NET MVC 5使用Filter過濾Action引數防止sql注入,讓你程式碼安全簡潔

在開發程式的過程中,稍微不注意就會隱含有sql注入的危險。今天我就來說下,ASP.NET mvc 5使用Filter過濾Action引數防止sql注入,讓你程式碼安全簡潔。不用每下地方對引數的值都進行檢查,看是使用者輸入的內容是否有危險的sql。如果沒個地方都要加有幾個缺

asp.net中過濾非法字元防止SQL注入

  string UserName = FunStr(Request.Form["UserName"].ToString()); string UserPwd = FunStr(Request.Form["UserPwd"].ToString());  public sta