我在asp.net中使用ValidationRequest =“True”,它不允许用户输入html标签和脚本,但我被告知要在浏览器中显示用户数据时进行html编码,说使用单引号( ') 和双引号 (") 可能会导致 XSS 脚本。
当我查看各种来源时,我认为如果我不允许页面中存在 html 和脚本,则不需要编码。当我们在 asp.net 页面中使用 validRequest=true 时,我无法创建需要在后端进行编码的情况。如果没有必要的话我真的不想使用html编码。
是否有使用 ValidationRequest=true 后仍需要进行 html 编码的示例?
谢谢。
最佳答案
对用户提供的数据进行编码很重要。您确实应该对来自用户的所有内容进行编码。尽管用户将被阻止输入任何看起来像标签的内容(基本上是带有尖括号的内容),但引号在其他情况下(例如包含在 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";//
你的提交按钮将会做一些你真的不希望它做的事情 - 导航到邪恶的地方。
尽管这显然是一个非常人为的示例,但通常最好只对所有用户输入进行编码。
关于javascript - 如果我使用 ValidationRequest=True 来防止 asp.net 中的 XSS(跨站脚本),我们是否需要 Html 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19441683/