我使用ASP.NET使用MVC框架版本2.0和实体框架构建了一个Intranet网站。
我感兴趣的一些数据是Notes。它作为类型文本存储在数据库中。它使用Entity框架保存和加载。它仅在文本框输入中显示在Web上。根本没有在服务器上使用这些数据。
所以问题是如果我关闭服务器上的验证,这是否会造成XSS危害。在将Notes放入文本框输入之前,我是否需要担心编码Notes。
评论1
我只使用.NET 3.5。我祈祷,一旦我离开Visual Studio 2008,这将在未来更新;)
以下是我如何将笔记放到网页上。
<%= Html.TextArea("Notes", null, new { rows = "10", style = "width:100%" }) %>
以上是将Notes放入网页的唯一方法。在服务器上,我正在做类似的事情(我遗漏了哪里声明):
var myStruct = (from u in myDB.dbSomeStruct
select u).FirstOrDefault();
myStruct.Notes = Notes;
myDB.SaveChanges();
答案 0 :(得分:1)
XSS真正归结为编码输出,即您从服务器发送到页面上的内容。
暂时搁置其他类型的注入攻击(例如SQL注入),用户可以向您发送任何恶意制作的输入。现在,我不建议以编码形式存储该输入,因为您可能希望用它来做其他事情(比如将它放在除Web之外的其他介质中)。但是,当您将该输入作为对Web请求的响应发回时,请确保对其进行编码。可能是唯一可以在响应中看到输入的用户是首先提供输入的原始用户,在这种情况下,您可能会认为没有必要对其进行编码。我建议将其编码为标准方法,因为您永远不知道应用程序功能何时可能发生变化,而其他用户现在可以看到该输入,然后突然间,您有可能的XSS漏洞利用!
因此,上述内容涉及来自您系统的输入。来自任何其他系统的输入也是如此; 始终对其进行编码。除了您自己明确创建的内容以外的任何其他来源的数据都不可信任。我发现从这个角度来看,这是一个缓解XSS的良好开端。
如果您在.NET 4上使用MVC 2,那么使用<%: Data %>
将使用default encoder HTML编码Data
。如果您不使用.NET 4,则需要使用<%= Html.Encode(Data) %>
。