我有一个ASP.NET Web窗体应用程序。有一个带有TextBox的页面,用户在这些页面中输入搜索词,用于查询数据库。
我知道我需要阻止JavaScript注入攻击。我该怎么做?
在MVC中,我会使用Html.Encode
。它似乎没有在Web窗体中被识别。
谢谢!
答案 0 :(得分:19)
答案 1 :(得分:8)
如果您使用的是ASP.NET 4或更高版本,则可以使用以下语法:
<%: Model.Username %>
将对表达式进行HTML编码。 Scott Gu explains the benefit of this syntax:
我们选择&lt;%:%&gt;语法,以便快速替换&lt;%=%&gt;的现有实例代码块。它还使您可以轻松搜索代码库中的&lt;%=%&gt;用于查找和验证您在应用程序中未使用HTML编码的任何情况的元素,以确保您具有正确的行为。
答案 2 :(得分:5)
在网络表单上,您可以调用
HttpUtility.HtmlEncode(foo);
小心不要双重编码。
答案 3 :(得分:3)
您可以使用Server.HtmlEncode(转换为HttpServerUtility.HtmlEncode
),但Microsoft有一个更好的网络保护库名为AntiXSS,您可以从CodePlex下载。它包含一个使用白名单方法HtmlEncoding
的实用程序(更安全,更好,recommended by OWASP虽然它们指向older version)。它还有一些工具,可以让你获得安全的HTML片段等。
但是,如果您不注意其他任何内容,请查看OWASP top 10。听起来你只是在抓住Web应用程序安全性的表面,这是最好的资源。跨站点脚本攻击只是您需要防范的一大部分内容之一。
如果您必须处理任何类型的合规性(PCI,红旗等),这也是您需要遵守的那个
答案 4 :(得分:0)
在Web Froms,.Net v4.0及更高版本上,您可以按以下方式使用:
<%
string notificationIcon = "<i class='fa fa-plus fa-icon fa-stack-right-top'></i>";
%>
<%: new HtmlString(notificationIcon) %>