2014-01-08 130 views
1

我有一个简单的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代码? 我会感谢一些提示,因为我对此感到困惑。 谢谢

+0

的我不知道你在哪里阅读,但它不是必需的。 –

+0

好吧,我不知道如何去XSS修复一个简单的jsp.I阅读此:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.232 _-_ Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes – Mary

回答

0

基本上,如果有人在你的任何参数中放入任何HTML,然后你在网站上显示这些HTML,它们的HTML将被浏览器解析。他们可以使用它来搞砸你的格式,也就是让一个B标签没有关闭,或者他们可以在脚本标签中指向另一个站点上的脚本。

,以防止其两种最基本的方式是:

  1. 检查任何用户输入数据<或>,并拒绝数据,如果它包含其中一方。
  2. 取消用户输入的所有HTML,将所有<和>替换为& lt;和& gt;或[和]。

如果你想禁止所有的HTML,那些将工作。但是如果你想让用户输入一些HTML,比如安全标签(B,I,EM,STRONG),那么你需要一个库来删除所有不在白名单上的HTML标签。

+0

感谢我在网上看到的一些例子的回应显示,html输入值已被转义。 。我也看到了一些例子,它在java代码中做为String safeOutput = ESAPI.encoder ).encodeForHTML(request.getParameter(“comment”)) - 编码是否应该在html和servlet /控制器中完成? – Mary

+0

感谢您的信息。 – Mary

+0

您的第一条评论中的例子是因为如果您要将用户输入写回html属性(例如value =“<%= userinput%>”),那么您还需要转义“,因为如果不是,他们可以关闭您的属性并插入其他属性,最基本的方法是将“用" – developerwjk

0

理想情况下,您应该使用一些安全框架工程,如HDIV (HTTP Data Integrity Validator)。我们将其用于一个大型电子商务应用程序 ,并刚刚获得我们的安全审查 成功。基于

一些强大的功能

  • 的Java
  • 支持框架的作品一样 - 支柱/弹簧MVC/JSF/servlet的等
  • 内置过滤器/拦截处理注射/ XSS/CSRF攻击等

从HDIV站点提取

HDIV是一个开源框架,消除或通过设计减轻了网络 安全隐患的一些最常用的JVM网络的构架

0

这几乎是不可能的,以防止有人进入的HTML片段在一般文本字段中,因为您可能希望允许它们输入“特殊”字符,例如& <和>。因此,不要试图阻止或删除HTML,它可能会更好地确保它在显示时以安全的方式完成。 The JSP c:out action does that。而不是写

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

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