首页 > Web开发 > 详细

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

时间:2020-02-20 12:35:36      阅读:74      评论:0      收藏:0      [点我收藏+]

问题:客户需要拦截掉某些非法请求地址(例如: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\(|\b((?i)alert|(?i)confirm|(?i)prompt|(?i)onEvent)|(?i)/Content|(?i)/Scripts\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+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;
            }
}

 

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

原文:https://www.cnblogs.com/xiangweisareas/p/12334568.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!