【发布时间】:2017-05-04 10:15:21
【问题描述】:
我看到这种方法允许在用户输入字段中使用 html: https://www.codeproject.com/Articles/995931/Preventing-XSS-Attacks-in-ASP-NET-MVC-using-Valida
但我需要的是不允许 HTML,我只需要用户能够输入
对于这种情况,没有比 [AllowHtml] 更好的解决方案了吗?
【问题讨论】:
标签: c# asp.net-mvc razor
我看到这种方法允许在用户输入字段中使用 html: https://www.codeproject.com/Articles/995931/Preventing-XSS-Attacks-in-ASP-NET-MVC-using-Valida
但我需要的是不允许 HTML,我只需要用户能够输入
对于这种情况,没有比 [AllowHtml] 更好的解决方案了吗?
【问题讨论】:
标签: c# asp.net-mvc razor
如果您担心安全问题。保留 [AllowHtml] 属性,然后清理应用了 [AllowHtml] 属性的特定属性。
我个人使用HtmlSanitizer,你可以从 NuGet 获得
pm > Install-Package HtmlSanitizer
下面的示例用法来自他们实际的 GitHub 页面(上面链接)。
var sanitizer = new HtmlSanitizer();
var html =
@"<script>alert('xss')</script><div onload=""alert('xss')""" +
@"style=""background-color: test"">Test<img src=""test.gif""" +
@"style=""background-image: url(javascript:alert('xss')); margin: 10px""></div>";
var sanitized = sanitizer.Sanitize(html, "http://www.example.com");
Assert.That(sanitized, Is.EqualTo(@"<div style=""background-color: test"">"
+ @"Test<img style=""margin: 10px"" src=""http://www.example.com/test.gif""></div>"));
【讨论】:
如果您正在清理服务器上的输入(通常在 ASP.NET 中默认情况下),您可以在提交表单之前在视图中使用一点 Javascript 来编码 HTML 字符。
function Encode(text)
{
var e = document.createElement("div");
e.innerText = e.textContent = text;
text = e.innerHTML;
return text;
}
console.log(Encode("<asd"));
您可以在提交表单之前使用onsubmit事件替换元素值。
以下是实际代码示例:https://jsfiddle.net/496zz5hv/3/。
【讨论】: