1

我在 asp.net 中使用 ValidationRequest="True" 并且它不允许用户输入 html 标记和脚本,但是我被告知在浏览器中显示用户数据时进行 html 编码,说明使用了单反逗号(')和双引号 (") 可能会导致 XSS 脚本。

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

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

谢谢你。

4

1 回答 1

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"; //提交按钮之类的内容,则会执行您确实不希望它执行的操作-导航到邪恶的地方。

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

于 2013-10-18T05:17:28.737 回答