UrlHelper幫助類:

得到主機(jī)頭

SQL注入驗(yàn)證方法

獲取當(dāng)前請求的原始URL

獲得當(dāng)前頁面客戶端的IP

判斷是否來自搜索引擎鏈接

獲取操作系統(tǒng)信息和瀏覽器具體信息

判斷是否是跨站提交

判斷當(dāng)前訪問是否來自瀏覽器軟件 等等


UrlHelper源碼下載


/// <summary>
/// 開發(fā)團(tuán)隊(duì):JsonsTeam
/// 官方主頁:http://hnxxbl.cn
/// </summary>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Management;

namespace JsonsTeamUtil.Helper
{
    public class UrlHelper
    {
        /// <summary>
        /// 獲得當(dāng)前頁面客戶端的IP
        /// 可以提取開啟代理/cdn服務(wù)后的客戶端真實(shí)IP
        /// </summary>
        /// <returns>當(dāng)前頁面客戶端的真實(shí)IP</returns>
        public static string GetTrueIP()
        {
            string ip = string.Empty;
            string X_Forwarded_For = HttpContext.Current.Request.Headers["X-Forwarded-For"];
            if (!string.IsNullOrWhiteSpace(X_Forwarded_For))
            {
                ip = X_Forwarded_For;
            }
            else
            {
                string CF_Connecting_IP = HttpContext.Current.Request.Headers["CF-Connecting-IP"];
                if (!string.IsNullOrWhiteSpace(CF_Connecting_IP))
                {
                    ip = CF_Connecting_IP;
                }
                else
                {
                    //沒開啟代理 正常獲取ip
                    ip = HttpContext.Current.Request.UserHostAddress;
                }
            }
            return ip;
        }
        /// <summary>
        /// 判斷當(dāng)前頁面是否接收到了Post請求
        /// </summary>
        /// <returns>是否接收到了Post請求</returns>
        public static bool IsPost()
        {
            return HttpContext.Current.Request.HttpMethod.Equals("POST");
        }
        /// <summary>
        /// 判斷當(dāng)前頁面是否接收到了Get請求
        /// </summary>
        /// <returns>是否接收到了Get請求</returns>
        public static bool IsGet()
        {
            return HttpContext.Current.Request.HttpMethod.Equals("GET");
        }
        /// <summary>
        /// 當(dāng)前頁面請求類型
        /// </summary>
        /// <returns></returns>
        public static string GetHttpMethod()
        {
            return HttpContext.Current.Request.HttpMethod;
        }
        /// <summary>
        /// 返回指定的服務(wù)器變量信息
        /// </summary>
        /// <param name="strName">服務(wù)器變量名</param>
        /// <returns>服務(wù)器變量信息</returns>
        public static string GetServerString(string strName)
        {
            //
            if (HttpContext.Current.Request.ServerVariables[strName] == null)
            {
                return "";
            }
            return HttpContext.Current.Request.ServerVariables[strName].ToString();
        }

        /// <summary>
        /// 返回上一個頁面的地址
        /// </summary>
        /// <returns>上一個頁面的地址</returns>
        public static string GetUrlReferrer()
        {
            string retVal = null;

            try
            {
                retVal = HttpContext.Current.Request.UrlReferrer.ToString();
            }
            catch { }

            if (retVal == null)
                return "";

            return retVal;

        }

        /// <summary>
        /// 得到當(dāng)前完整主機(jī)頭
        /// </summary>
        /// <returns></returns>
        public static string GetCurrentFullHost()
        {
            HttpRequest request = System.Web.HttpContext.Current.Request;
            if (!request.Url.IsDefaultPort)
            {
                return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString());
            }
            return request.Url.Host;
        }

        /// <summary>
        /// 得到主機(jī)頭
        /// </summary>
        /// <returns></returns>
        public static string GetHost()
        {
            return HttpContext.Current.Request.Url.Host;
        }


        /// <summary>
        /// 獲取當(dāng)前請求的原始 URL(URL 中域信息之后的部分,包括查詢字符串(如果存在))
        /// </summary>
        /// <returns>原始 URL</returns>
        public static string GetRawUrl()
        {
            return HttpContext.Current.Request.RawUrl;
        }

        /// <summary>
        /// 判斷當(dāng)前訪問是否來自瀏覽器軟件
        /// </summary>
        /// <returns>當(dāng)前訪問是否來自瀏覽器軟件</returns>
        public static bool IsBrowserGet()
        {
            string[] BrowserName = { "ie", "opera", "netscape", "mozilla", "konqueror", "firefox" };
            string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
            for (int i = 0; i < BrowserName.Length; i  )
            {
                if (curBrowser.IndexOf(BrowserName[i]) >= 0)
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// 判斷當(dāng)前訪問來自什么瀏覽器軟件
        /// </summary>
        /// <returns>判斷當(dāng)前訪問來自什么瀏覽器軟件</returns>
        public static string GetBrowserStr()
        {
            string BrowserStr = string.Empty;
            HttpBrowserCapabilities hbc = HttpContext.Current.Request.Browser;
            string browserType = hbc.Browser.ToString();     //獲取瀏覽器類型
            string browserVersion = hbc.Version.ToString();    //獲取版本號
            BrowserStr = browserType   browserVersion;
            return BrowserStr;
        }
        /// <summary>
        /// 獲取操作系統(tǒng)信息和瀏覽器具體信息
        /// </summary>
        /// <returns></returns>
        public static string GetAgentStr()
        {
            return HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"];
        }

        /// <summary>
        /// 返回當(dāng)前頁面是否是跨站提交
        /// </summary>
        /// <returns>當(dāng)前頁面是否是跨站提交</returns>
        public static bool IsCrossSitePost()
        {

            // 如果不是提交則為true
            if (!UrlHelper.IsPost())
            {
                return true;
            }
            return IsCrossSitePost(UrlHelper.GetUrlReferrer(), UrlHelper.GetHost());
        }

        /// <summary>
        /// 判斷是否是跨站提交
        /// </summary>
        /// <param name="urlReferrer">上個頁面地址</param>
        /// <param name="host">論壇url</param>
        /// <returns></returns>
        public static bool IsCrossSitePost(string urlReferrer, string host)
        {
            if (urlReferrer.Length < 7)
            {
                return true;
            }
            Uri u = new Uri(urlReferrer);
            return u.Host != host;
        }

        /// <summary>
        /// 判斷是否來自搜索引擎鏈接
        /// </summary>
        /// <returns>是否來自搜索引擎鏈接</returns>
        public static bool IsSearchEnginesGet()
        {
            if (HttpContext.Current.Request.UrlReferrer == null)
            {
                return false;
            }
            string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
            string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
            for (int i = 0; i < SearchEngine.Length; i  )
            {
                if (tmpReferrer.IndexOf(SearchEngine[i]) >= 0)
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// 判斷來自什么搜索引擎鏈接
        /// </summary>
        /// <returns>判斷來自什么搜索引擎鏈接</returns>
        public static string GetSearchEnginesGet()
        {
            if (HttpContext.Current.Request.UrlReferrer == null)
            {
                return "不是通過搜索引擎進(jìn)入的";
            }
            string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
            string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
            for (int i = 0; i < SearchEngine.Length; i  )
            {
                if (tmpReferrer.IndexOf(SearchEngine[i]) >= 0)
                {
                    return SearchEngine[i];
                }
            }
            return "不是通過搜索引擎進(jìn)入的";
        }
        /// <summary>
        /// 獲得當(dāng)前完整Url地址
        /// </summary>
        /// <returns>當(dāng)前完整Url地址</returns>
        public static string GetUrl()
        {
            return HttpContext.Current.Request.Url.ToString();
        }


        /// <summary>
        /// 獲得指定Url參數(shù)的值
        /// </summary>
        /// <param name="strName">Url參數(shù)</param>
        /// <returns>Url參數(shù)的值</returns>
        public static string GetQueryString(string strName)
        {

            if (HttpContext.Current.Request.QueryString[strName] == null)
            {
                return String.Empty;
            }
            return HttpContext.Current.Request.QueryString[strName];

        }
        /// <summary>
        /// 獲得當(dāng)前頁面的名稱
        /// </summary>
        /// <returns>當(dāng)前頁面的名稱</returns>
        public static string GetPageName()
        {
            string[] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
            return urlArr[urlArr.Length - 1].ToLower();
        }

        /// <summary>
        /// 返回表單或Url參數(shù)的總個數(shù)
        /// </summary>
        /// <returns></returns>
        public static int GetParamCount()
        {
            return HttpContext.Current.Request.Form.Count   HttpContext.Current.Request.QueryString.Count;
        }


        /// <summary>
        /// 獲得指定表單參數(shù)的值
        /// </summary>
        /// <param name="strName">表單參數(shù)</param>
        /// <returns>表單參數(shù)的值</returns>
        public static string GetFormString(string strName)
        {
            if (HttpContext.Current.Request.Form[strName] == null)
            {
                return "";
            }
            return HttpContext.Current.Request.Form[strName];
        }

        /// <summary>
        /// 獲得Url或表單參數(shù)的值, 先判斷Url參數(shù)是否為空字符串, 如為True則返回表單參數(shù)的值
        /// </summary>
        /// <param name="strName">參數(shù)</param>
        /// <returns>Url或表單參數(shù)的值</returns>
        public static string GetString(string strName)
        {
            if ("".Equals(GetQueryString(strName)))
            {
                return GetFormString(strName);
            }
            else
            {
                return GetQueryString(strName);
            }
        }

        //QueryString 數(shù)據(jù)檢測GET惡意數(shù)據(jù)

        private const string StrKeyWord = @".*(select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and).*";
        private const string StrRegex = @"[-|;|,|/|(|)|[|]|}|{|%|@|*|!|']";

        /// <summary>
        /// 獲取Post的數(shù)據(jù)
        /// </summary>
        public static string ValidUrlPostData()
        {
            bool result = false;
            string res = string.Empty;
            for (int i = 0; i < HttpContext.Current.Request.Form.Count; i  )
            {
                result = ValidData(HttpContext.Current.Request.Form[i].ToString());
                if (result)
                {
                    res = "檢測出POST惡意數(shù)據(jù): 【"   HttpContext.Current.Request.Form[i].ToString()   "】 URL: 【"   HttpContext.Current.Request.RawUrl   "】來源: 【"   HttpContext.Current.Request.UserHostAddress   "】";
                    break;
                }//如果檢測存在漏洞
            }
            return res;
        }

        /// <summary>
        /// 獲取QueryString中的數(shù)據(jù)
        /// </summary>
        public static string ValidUrlGetData()
        {
            bool result = false;
            string res = string.Empty;
            for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i  )
            {
                result = ValidData(HttpContext.Current.Request.QueryString[i].ToString());
                if (result)
                {
                    res = "檢測出GET惡意數(shù)據(jù): 【"   HttpContext.Current.Request.QueryString[i].ToString()   "】 URL: 【"   HttpContext.Current.Request.RawUrl   "】來源: 【"   HttpContext.Current.Request.UserHostAddress   "】";
                    break;
                }//如果檢測存在漏洞
            }
            return res;
        }

        /// <summary>
        /// 驗(yàn)證是否存在注入代碼
        /// </summary>
        /// <param name="inputData"></param>
        public static bool ValidData(string inputData)
        {
            //里面定義惡意字符集合
            //驗(yàn)證inputData是否包含惡意集合
            if (Regex.IsMatch(inputData.ToLower(), GetRegexString()))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 獲取正則表達(dá)式
        /// </summary>
        /// <param name="queryConditions"></param>
        /// <returns></returns>
        private static string GetRegexString()
        {
            //構(gòu)造SQL的注入關(guān)鍵字符
            string[] strBadChar =
        {
            "and"
            ,"exec"
            ,"insert"
            ,"select"
            ,"delete"
            ,"update"
            ,"count"
            ,"from"
            ,"drop"
            ,"asc"
            ,"char"
            ,"or"
            ,"%"
            ,";"
            ,":"
            ,"\'"
            ,"\""
            ,"-"
            ,"chr"
            ,"mid"
            ,"master"
            ,"truncate"
            ,"char"
            ,"declare"
            ,"SiteName"
            ,"net user"
            ,"xp_cmdshell"
            ,"/add"
            ,"exec master.dbo.xp_cmdshell"
            ,"net localgroup administrators"
        };

            //構(gòu)造正則表達(dá)式
            string str_Regex = ".*(";
            for (int i = 0; i < strBadChar.Length - 1; i  )
            {
                str_Regex  = strBadChar[i]   "|";
            }
            str_Regex  = strBadChar[strBadChar.Length - 1]   ").*";

            return str_Regex;
        }

        #region 判斷請求來源是否在允許的域名中
        /// <summary>
        /// 判斷請求來源是否允許,允許則返回true
        /// </summary>
        public static bool IsAllowDomain
        {
            get
            {
                if (HttpContext.Current.Request.UrlReferrer == null) return false;
                string reqDomain = HttpContext.Current.Request.UrlReferrer.Host.ToLower();
                return isAllowUrl(reqDomain);
            }
        }
        /// <summary>
        /// 判斷請求來源是否允許
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static bool isAllowUrl(string url)
        {
            string[] AllowDomains = new string[] {
                "jsons.cn"
            };
            foreach (string str in AllowDomains)
            {
                if (url.EndsWith(str)) return true;
            }
            return false;
        }
        #endregion
        /// <summary>
        /// 獲取CPU的ID
        /// </summary>
        /// 需要引用dll:System.Management
        /// <returns></returns>
        public static string GetCPUId()
        {
            string strCpuID = "";
            try
            {
                ManagementClass mc = new ManagementClass("Win32_Processor");
                ManagementObjectCollection moc = mc.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    strCpuID = mo.Properties["ProcessorId"].Value.ToString();
                    break;
                }
            }
            catch
            {
                strCpuID = "網(wǎng)絡(luò)請求出錯了 ,請換一種方法吧";//默認(rèn)給出一個
            }
            return strCpuID;

        }

        /// <summary>
        /// 獲取CPU的名稱
        /// </summary>
        /// <returns></returns>
        public static string GetCPUName()
        {
            RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0");

            object obj = rk.GetValue("ProcessorNameString");
            string CPUName = (string)obj;
            return CPUName.TrimStart();
        }
        /// <summary>
        /// 獲取url重寫后的地址
        /// </summary>
        /// <returns></returns>
        public static string GetUrlStr()
        {
            return HttpContext.Current.Request.Url.AbsoluteUri;
        }
    }
}


原文鏈接:UrlHelper幫助類庫,UrlHttp操作類大全,SQL注入驗(yàn)證方法