我一直在使用微软的AntiXss库,并想知道为什么它的JavaScriptEncode
方法将结果包装在单引号中有充分的理由?这种行为似乎非常规.
我试图在我的ASP.NET MVC应用程序中找到防止跨站点脚本的最佳方法.我计划使用Microsoft的AntiXSS库并基本上保护两个级别:1)保护常规文本框(即那些只应包含纯文本的文本框和2)保护可生成HTML的富文本框.图书馆本身非常简单,但我很难决定在何处进行验证.我使用强类型HTML帮助程序并直接绑定我的模型/视图模型,并希望避免在每个操作方法中单独应用AntiXSS.另外,绝对不想在我的帖子操作上关闭validateinput,如果我在我的模型/ viewmodel的某个属性中传递HTML,这是一个要求.
是否可以在ASP.NET MVC中注入AntiXSS,以便在渲染视图(解码)之前和进入动作过滤器(编码)之前应用它?
提前致谢
我的公司要求我们的ASP.NET代码在发布代码之前通过Fortify 360扫描.我们到处使用AntiXSS来清理HTML输出.我们还验证输入.不幸的是,他们最近更改了Fortify正在使用的"模板",现在它将我们所有的AntiXSS调用标记为"糟糕验证".这些调用正在执行AntiXSS.HTMLEncode(sEmailAddress).
任何人都知道什么会满足Fortify?它标记的很多东西都是输出,其中值来自数据库而根本不是来自用户,所以如果HTMLEncode不够安全,我们根本不知道是什么!
我可以在没有Visual Studio的ASP.Net 2.0应用程序中包含Microsoft的Anti-XSS库吗?如果是这样,怎么样?
我已经下载并安装了这个库.从Microsoft的下载页面:"在您的应用程序中引用该库并使用它." 对此进行研究会发现使用Visual Studio执行此操作的说明,但并非没有.
这个SO答案链接到一些有前途的文章,但那些也假设Visual Studio开始.
(至于为什么我不能使用Visual Studio:我的经理说"不")
我正在使用AntiXssLibrary 4.0但它没有转义\ x3c.我的错是什么?
我已将AntiXss配置为HttpEncoder
基于此处的默认值http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx并设置encoderType
的httpRuntime
在web.config
.
我也创建AntiXSSEncoder
派生HttpEncoder
而不是弃用
output.Write(AntiXss.HtmlEncode(value));
Run Code Online (Sandbox Code Playgroud)
我用它来覆盖HtmlEncode
方法:
output.Write(Encoder.HtmlEncode(value));
Run Code Online (Sandbox Code Playgroud)
目前,如果我浏览这个:
http://localhost:28453/?k=sss\x3cscript\x3ealert%28\x27haaha\x27%29;\x3c/script\x3e
Run Code Online (Sandbox Code Playgroud)
警报"haaha"显示AntiXss库无法正常工作.我只想在这个节目http://channel9.msdn.com/Events/MIX/MIX10/FT05看到第13分钟.
为了确认我还在一个动作中设置了这个:
public ActionResult Index(string k)
{
ViewBag.k = k;
ViewBag.j = Microsoft.Security.Application.Encoder.HtmlEncode(k);
return View();
}
Run Code Online (Sandbox Code Playgroud)
然后在视图中我说:
<script type="text/javascript">
$(document).ready(function () {
var a = '@ViewBag.k';
var b = '@ViewBag.j';
$('.resultName:first').html(b);
});
</script>
Run Code Online (Sandbox Code Playgroud)
从浏览器中,值a和b是相同的,表明AntiXss不能正常工作!
<script type="text/javascript">
$(document).ready(function () {
var a = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e';
var b = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e';
$('.resultName:first').html(b);
});
</script>
Run Code Online (Sandbox Code Playgroud)
更新:它只发生在我使用 …
我正在阅读有关ASP.NET脚本漏洞的内容,其中一条建议是:(
重点是我的;建议是网页中的"防止脚本漏洞利用"部分中的#3)
如果您希望应用程序接受某些HTML(例如,来自用户的某些格式化说明),则应在将HTML提交到服务器之前在客户端对其进行编码.有关更多信息,请参阅如何:通过将HTML编码应用于字符串来防止Web应用程序中的脚本漏洞.
这不是很糟糕的建议吗?我的意思是,一个开发者可以通过curl或类似的东西发送HTML,然后HTML将被编码发送到服务器,这可能不是很好(?)
我在这里遗漏了什么或者错误地解释了这个陈述吗?
我知道有几种方法可以做到这一点,但它们都有一些缺点.是否有"接受"的方式,这被认为是最好的?
我以前使用的Microsoft.Security.Application.AntiXss.JavaScriptEncode()
是很棒的,但AntiXSS已经结束了,因为编码器现在包含在4.5中的.NET中.
但是,由于某种原因,System.Web.Security.AntiXss.AntiXssEncoder
不包括该JavaScriptEncode
方法.
有System.Web.HttpUtility.JavaScriptStringEncode()
,但它使用黑名单方法进行编码,因此它不太可能像白名单编码器一样好.
我已经看到了一些使用的建议System.Web.Script.Serialization.JavaScriptSerializer.Serialize()
,但这只是打电话HttpUtility.JavaScriptStringEncode()
.
那么目前用于编码作为JS变量编写的值的最佳接受白名单方法是什么?
AntiXssEncoder.HtmlEncode 仅支持.Net 框架。当我们的应用程序位于 .net core 2.1 中时,我可以使用 WebUtility.HtmlEncode 进行 Antixss 吗?
我不知道我是否正确行事.
我第一次构建一些东西来防止页面上的攻击.
我将从底部开始:
我有财产:
public string Description {get;set;}
Run Code Online (Sandbox Code Playgroud)
用户可以通过tinyMCE设置它的值
tinyMCE.init({
mode: "textareas",
theme: "advanced",
encoding : "xml"...
Run Code Online (Sandbox Code Playgroud)
在控制器之前我将其保存在数据库中我做:
model.Description = HttpUtility.HtmlDecode(model.Description);
Run Code Online (Sandbox Code Playgroud)
在数据库中我有一个像这样的值:
<p>bla bla bla</p>
Run Code Online (Sandbox Code Playgroud)
我在我的项目中添加了AntiXSS库:
public class AntiXssEncoder : HttpEncoder
{
public AntiXssEncoder() { }
protected override void HtmlEncode(string value, TextWriter output)
{
output.Write(Encoder.HtmlEncode(value)); // on breakpoint code always get in here
}
...
Run Code Online (Sandbox Code Playgroud)
当我从数据库显示数据时,我使用:
@Html.Raw(Model.Place.Description)
Run Code Online (Sandbox Code Playgroud)
它工作正常我只看到文字.没有Html标签.Breaklines工作正常.我可以用粗体,斜体等来设置文本样式.
但如果我进入:
<script>alert(open to attack);</script>
Run Code Online (Sandbox Code Playgroud)
我有警报窗口.
我不明白我需要做些什么才能防止这种情况发生?
我在我的网站上使用GetSafeHtmlFragment,我发现除了<p>
和<a>
删除所有标签.
我研究过,我发现微软没有解决方案.
是否有任何取代它或有任何解决方案?
谢谢.
antixsslibrary ×10
xss ×6
asp.net ×5
c# ×3
asp.net-mvc ×2
asp.net-2.0 ×1
asp.net-4.0 ×1
fortify ×1
html-encode ×1
javascript ×1
security ×1
tinymce ×1