ASP .NET如何拦截某些非法的请求地址

问题:客户需要拦截掉某些非法请求地址(例如:Http://www.xiangwei.com/scripts/.../.../b247.php),因为很大一部分是安全漏洞测试软件请求的,导致用户收到了大量无意义的报错邮件。

解决思路:

  1.我们没办法彻底分清楚哪些是测试软件请求,哪些是用户请求的。所以只能根据测试软件常用的字符来使用正则判断(我这里收到了大量Http://www.xiangwei.com/scripts/和Http://www.xiangwei.com/content/等开头的请求)。

  2.如果根据scripts和content来拦截,要注意对页面资源文件的区分。

解决办法:

  在global.cs的Application_BeginRequest中添加以下判断 

if (Request.RequestType.ToUpper() == "GET")
{
                if (XSSFilter.IsInvalidIllegalUrl())
                {
                    Response.Write("The get data you submitted has malicious characters!");
                    Response.End();
                }
}

  XSSFilter部分代码如下(这里有部分代码是参考他人成果,抱歉忘记该作者的博客地址,惭愧)。

  代码解释:因为访问的非法地址,我们页面上是不会有的,所以它的来源页域名不与我们的项目页域名一致,所以我们只在来源Url与当前Url不一致的情况下去拦截,这样就避免将资源文件给KO了!

private const string StrRegex = @"<[^>]+?style=[w]+?:expression(|((?i)alert|(?i)confirm|(?i)prompt|(?i)onEvent)|(?i)/Content|(?i)/Scripts|^+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|(and|or).{1,6}?(=|>|<|in|like)|/*.+?*/|<s*script|<s*img|EXEC|UNION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)s+(TABLE|DATABASE)";
public
static bool IsInvalidIllegalUrl() { bool result = false; var urlReferrer = HttpContext.Current.Request.UrlReferrer;//获取来源页URL var url = HttpContext.Current.Request.Url; if (urlReferrer == null) { result = CheckData(url.ToString()); } else if (urlReferrer.Host != url.Host) { result = CheckData(url.ToString()); } return result; }
public static bool CheckData(string inputData)
{
            if (Regex.IsMatch(inputData, StrRegex))
            {
                return true;
            }
            else
            {
                return false;
            }
}
原文地址:https://www.cnblogs.com/xiangweisareas/p/12334568.html