我有一个简单的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"  />
.

如何编码电子邮件,fullname和uerid? 此外,我已经看到了如下的例子:

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

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

有帮助吗?

解决方案

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

保护它的两个最基本的方法是:

  1. 检查在任何用户输入数据中的<或>,如果它包含其中任何一个,则拒绝数据。
  2. 通过替换所有与用户输入的任何HTML无效和gt;或[和]。
  3. 如果您想禁止所有HTML,那么这些都将起作用。但是,如果你想允许用户输入一些HTML,就像安全标签一样(b,i,em,strong),那么你需要一个删除不在白名单上的所有HTML标记的库。

其他提示

理想情况下应该使用一些安全框架,如 hdiv(http data Integrity validator)。我们使用它 一个大型电子商务应用程序,刚刚获得了安全审查 成功。

一些很棒的功能

  • 基于Java
  • 支持帧 - 工作(如 - Struts / Spring-MVC / JSF / Servlets等)
  • 用于处理注射/ xss / csrf攻击的内置过滤器/拦截器等

从HDIV网站提取

hdiv是一个开源框架,消除或减轻了web 对于一些最常用的JVM Web框架的设计安全风险

实际上是不可能防止人们在一般文本字段中输入HTML的片段,因为您可能希望允许它们输入“特殊”字符,例如&<和>。因此,而不是尝试防止或删除HTML,可能更好地确保在显示时,它以安全的方式完成。 jsp c:out操作是那个。而不是写作

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

写入

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top