防止跨站点脚本

时间:2014-01-08 20:31:53

标签: javascript jsp xss owasp

我有一个简单的jsp,它有3个输入(名称,ID和电子邮件)和表单提交。从做一些阅读,看起来我的输入值应该编码。我怎么能这样做?谁能提供一个例子 例如

 <td><input id="email" name="email" value=""/></td>
 <td><input id="fullname" name="fullname" value=""/></td>
 <td><input id="userId" name="userId" value=""/></td>
 <input type ="submit" value ="Get User"  />

如何编码电子邮件,全名和uerId? 我也见过如下例子:

  String safeOutput = ESAPI.encoder().encodeForHTML( Comment)

是否应该对HTML和java代码进行编码? 我会很感激一些提示,因为我对此感到困惑。 感谢

3 个答案:

答案 0 :(得分:0)

基本上,如果有人在您的任何参数中放入任何HTML,然后您在网站上显示这些HTML,那么他们的HTML将由浏览器进行解析。他们可以使用它来搞砸你的格式,即保持B标签未闭合,或者他们可以放入指向另一个网站上的脚本的脚本标签。

防范它的两种最基本的方法是:

  1. 检查&lt;或者&gt;在任何用户输入数据中,如果数据包含其中任何一个,则拒绝该数据。
  2. 通过替换所有&lt;
  3. 来取消用户输入的任何HTML。和&gt;与&amp; lt;和&amp; gt;或[和]。
  4. 如果您想要禁止所有HTML,这些将有效。但是如果你想允许用户输入一些HTML,比如安全标签(B,I,EM,STRONG),那么你需要一个库来删除不在白名单上的所有HTML标签。

答案 1 :(得分:0)

  

理想情况下,您应该使用HDIV (HTTP Data Integrity Validator)之类的安全框架。我们用它   一个大型电子商务应用程序,刚刚得到我们的安全审查   成功的。

一些很棒的功能

  • 基于Java
  • 支持框架 - 如struts / spring-mvc / jsf / servlets等
  • 用于处理注入/ XSS / CSRF攻击等的内置过滤器/拦截器

从HDIV网站提取

  

HDIV是一个消除或减轻网络的开源框架   一些最常用的JVM Web框架的设计安全风险

答案 2 :(得分:0)

实际上不可能阻止人们在一般文本字段中输入HTML片段,因为您可能希望允许他们输入“特殊”字符,例如&amp; &LT;和&gt;。因此,不要试图阻止或删除HTML,最好确保在显示时,以安全的方式完成。 The JSP c:out action does that。而不是写

 <p>You said: ${userMessage}</p>

 <p>You said: <c:out value="${userMessage}"/></p>