题
我有一个简单的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标签,或者他们可以放入指向另一个站点上的脚本的脚本标记。
保护它的两个最基本的方法是:
- 检查在任何用户输入数据中的<或>,如果它包含其中任何一个,则拒绝数据。
- 通过替换所有
与用户输入的任何HTML无效和gt;或[和]。
如果您想禁止所有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>
. 不隶属于 StackOverflow