如果我使用ValidationRequest = True来阻止asp.net中的XSS(跨站点脚本),我们是否需要Html编码?

时间:2013-10-18 04:37:31

标签: javascript jquery asp.net encoding xss

我正在使用ValidationRequest =" True"在asp.net中,它不允许用户输入html标签和脚本,但我被告知要在浏览器中显示用户数据时执行html编码,说明使用单个倒置逗号(')和双引号逗号(")可能导致XSS脚本编写。

当我浏览各种来源时,如果我不允许在页面中使用html和脚本,我认为不需要编码。当我们在asp.net页面中使用validationRequest = true时,我无法创建需要在后端进行编码的情况。如果没有必要,我真的不想使用html编码。

有没有使用ValidationRequest = true并仍然需要进行html编码的示例?

谢谢。

1 个答案:

答案 0 :(得分:0)

编码用户提供的数据非常重要。你真的应该编码来自用户的一切。即使用户将被阻止输入任何看起来像标签的东西(基本上任何带有尖括号的东西),引号在其他情况下都是危险的,例如包含在html元素的属性中。

例如,假设您有一个带有按钮的页面,该按钮使用用户提供的一些数据调用JavaScript函数。

<asp:Button ID="btnSubmit" runat="server" Text="Do something"></asp:Button>

在您的代码中,您将客户端点击属性设置为某个用户提供的值:

string userInput = ""; // <-- from wherever
btnSubmit.OnClientClick= "someFunction('" + userInput + "')";

如果您的用户输入类似a'); location.href = "http://www.evil.com"; //的内容,您的提交按钮将执行您真正不希望它执行的操作 - 导航到邪恶的地方。

虽然这显然是一个非常人为的例子,但通常最好只对所有用户输入进行编码。