【愚公系列】2023年04月 .NET CORE工具案例-基于AntiXssUF的跨脚本XSS中间件

举报
愚公搬代码 发表于 2023/04/30 23:32:25 2023/04/30
【摘要】 @TOC 前言XSS是一种跨站脚本攻击,攻击者通过在网页中注入恶意脚本,从而获取用户的敏感信息或者控制用户的浏览器。XSS 的应用场景和案例包括但不限于:窃取用户的 Cookie、密码等敏感信息,篡改网页内容,进行钓鱼攻击,控制用户浏览器等。其中,最常见的 XSS 攻击是通过在网站中注入恶意脚本,使得用户在访问该网站时执行该脚本,从而达到攻击的目的。AntiXssUF(XSS)过滤器,以白名...

@TOC


前言

XSS是一种跨站脚本攻击,攻击者通过在网页中注入恶意脚本,从而获取用户的敏感信息或者控制用户的浏览器。

XSS 的应用场景和案例包括但不限于:窃取用户的 Cookie、密码等敏感信息,篡改网页内容,进行钓鱼攻击,控制用户浏览器等。其中,最常见的 XSS 攻击是通过在网站中注入恶意脚本,使得用户在访问该网站时执行该脚本,从而达到攻击的目的。

AntiXssUF(XSS)过滤器,以白名单的过滤策略,支持多种过滤策略,可以根据业务场景选择适合的过滤策略,或者根据用户角色动态绑定过滤策略,支持OwaspAntisamy项目的配置,支持json格式的配置。

AntiXssUF源码网址:https://gitee.com/ufangx/AntiXssUF


一、AntiXssUF的跨脚本XSS中间件

1.安装包

AntiXssUF


2.添加依赖注入

#region XSS过滤器
string ContentRootPath = builder.Environment.ContentRootPath;
//添加策略和设置默认策略
builder.Services.AddXssFilter(opt => opt.DefaultSchemeName = "DefaultPolicy")
.AddScheme<AntisamyPolicy>("antisamy", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/antisamy.xml")))
.AddScheme<AntisamyPolicy>("anythinggoes", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/antisamy-anythinggoes.xml")))
.AddScheme<AntisamyPolicy>("ebay", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/antisamy-ebay.xml")))
.AddScheme<AntisamyPolicy>("myspace", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/antisamy-myspace.xml")))
.AddScheme<AntisamyPolicy>("slashdot", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/antisamy-slashdot.xml")))
.AddScheme<AntisamyPolicy>("test", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/antisamy-test.xml")))
.AddScheme<JsonFilterPolicy>("DefaultPolicy", () => File.ReadAllTextAsync(Path.Combine(ContentRootPath, "resources/DefaultPolicy.json")));
;
//添加模型绑定器
builder.Services.AddControllers(options =>
{
options.ModelBinderProviders.Insert(0, new RichTextBinderProvider());
});
#endregion


3.使用方式

3.1 构造函数使用

[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
private readonly IFilterPolicyFactory policyFactory;
//依赖注入
public HomeController(IFilterPolicyFactory policyFactory)
{
this.policyFactory = policyFactory;
}
[HttpGet(Name = "Test")]
public async Task<IActionResult> Test(string source)
{
var policyName = "ebay";//策略名称
var filter = await policyFactory.CreateHtmlFilter(policyName);//创建过滤器
var clean = filter.Filters(source);//过滤危险代码
return Content(clean);
}
}


3.2 模型绑定器使用

public class TestModel
{
public string Name { get; set; }
[XssSchemeName("ebay")]
public RichText RichText { get; set; }
}


使用

public IActionResult Test(TestModel model)
{
string clean = model?.RichText;//这里自动过滤危险代码
return Content(clean??string.Empty);
}
//使用参数绑定过滤策略
public IActionResult Test([XssSchemeName("ebay")] RichText richText)
{
string clean = richText;//这里自动过滤危险代码
return Content(clean??string.Empty);
}

3.3 直接使用

1、使用内置的默认策略

//使用参数绑定过滤策略,这里需要添加模型绑定器
public IActionResult Test(RichText richText)
{
string clean = richText;//这里自动过滤危险代码
return Content(clean??string.Empty);
}
//这里不需要添加模型绑定器
public IActionResult Test(string source)
{
RichText richText=source;
string clean = richText;//这里自动过滤危险代码
return Content(clean??string.Empty);
}

2、指定策略

public IActionResult Test(string source)
{
var policy = new AntisamyPolicy();//json格式用JsonFilterPolicy类
policy.Init(File.ReadAllText("c:/www/resources/antisamy-ebay.xml"),"ebay");
var filter=new HtmlFilter(policy);
var clean = filter.Filters(source);//过滤危险代码
return Content(clean??string.Empty);
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。