我们有一个混合的webforms / asp.net应用程序,它使用jquery从javascript进行了大量的部分页面更新。
我们应用程序javascript中的典型(不安全)模式是响应用户的请求,以使用以下内容重写页面的一部分:
$.ajax({
type: "GET",
url: urlVariableHere,
success: function (data) {
$("#elementIdHere").html(data);
},
error: function (XMLHttpRequest, ajaxOptions, ex) {
errorHandlerFunction(XMLHttpRequest);
}
“ urlVariableHere”指向一个MVC控制器方法,该方法返回一个呈现的MVC视图。换句话说,Controller方法返回原始HTML的blob。
此模式不安全,因为调用了JQuery的html()方法,该方法容易受到跨站点脚本攻击的攻击。现在,我们需要该应用程序通过Veracode静态分析,并且这种不安全的模式会重复数百次。
Hooman在他的回答中指出,如果我们调用的Controller方法呈现的View不使用Html.Raw方法,则可以免受XSS攻击。问题是,我们需要通过Veracode静态扫描,并且由于内部原因,我们不能将这些缺陷标记为“已缓解”。由于内部原因,应用程序必须通过缓解为零的静态扫描。
什么是使该应用程序安全的最佳方法(即最省时),并且仍然能够通过javascript进行部分页面更新?现在我只看到三种选择,所有这些都花了很大的力气:
我错过了一个更简单的解决方案吗?
答案 0 :(得分:0)
据我所知,当您从用户那里获得一些输入时,XSS是一个问题,对我来说尚不清楚为什么您不应该信任自己控制器的响应?您正在做的事情非常典型,而且我见过无数的教程(例如c-sharpcorner,aspsnippets或dotnetthoughts等)。
此外,ASP.NET MVC View Engine encodes HTML by default。我不确定您如何呈现局部视图,但是除非您使用@Html.Raw
,否则您可能会double encode获得结果。
但是,如果要对HTML结果进行编码,则可以转义HTML字符串see this answer