利用微软AntiXss Library过滤输出字符,防止XSS攻击
Posted 天王星天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用微软AntiXss Library过滤输出字符,防止XSS攻击相关的知识,希望对你有一定的参考价值。
假如项目在前期没有过滤客户提交的字符,那么可以在输出的时候,对输出的字符进行过滤,防止出现XSS跨域攻击。
原理简单:利用ASP.NET API的管道原理,在MessageHandlers中添加一个自定义的处理环节。
好了,源代码如下:
public class MessageFilterOutputHandler : MessageHandler { protected override async Task OutgoingMessageAsync(HttpResponseMessage message) { var ps = await message.Content.ReadAsStringAsync(); ps = AntiXssEncoder.htmlEncode(ps, false); message.Content = new StringContent(ps); } } public abstract class MessageHandler : DelegatingHandler { protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var response = await base.SendAsync(request, cancellationToken); await OutgoingMessageAsync(response); return response; } protected abstract Task OutgoingMessageAsync(HttpResponseMessage message); }
其中,OutgoingMessageAsync方法中,利用了微软的AntiXss类库,防止输出:<script>,<iframe>等敏感字符。
另外,Global文件中,在Application_Start方法中添加,对MessageFilterOutputHandler的调用。
GlobalConfiguration.Configuration.MessageHandlers.Add(new MessageFilterOutputHandler());
以上是关于利用微软AntiXss Library过滤输出字符,防止XSS攻击的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft 防跨站点脚本库AntiXSS Library
Microsoft 防跨站点脚本库AntiXSS Library v4.2.1