当前位置:  开发笔记 > 编程语言 > 正文

Java防止跨站点脚本的最佳实践

如何解决《Java防止跨站点脚本的最佳实践》经验,为你挑选了2个好方法。

我已经完成了OWASP十大漏洞,发现跨站点脚本是我们必须记笔记的.建议的解决方案很少.有人说不要使用"黑名单"验证来检测输入中的XSS或编码输出.搜索和替换只有几个字符(<以及>其他类似的字符或短语script)很弱,并且已成功攻击.即使是未经检查的标签在某些情况下也是不安全的.XSS拥有数量惊人的变体,可以轻松绕过黑名单验证.另一个解决方案是强输出编码.在渲染之前,确保所有用户提供的数据都经过适当的实体编码(HTML或XML,具体取决于输出机制).那么,这是阻止跨站点脚本验证和替换输入或编码输出的最佳方法?



1> BalusC..:

通常的做法是在JSP 中重新显示期间HTML转义任何用户控制的数据,而不是在servlet 中处理提交的数据期间或在DB 中存储期间.在JSP中可以使用JSTL(安装它,只是下降JSTL-1.2.jar中)标签或功能这一点.例如/WEB-INF/libfn:escapeXml

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...

Welcome

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...

而已.不需要黑名单.请注意,用户控制的数据涵盖了HTTP请求引入的所有内容:请求参数,正文和标题(!!).

如果你在处理提交的数据和/或存储在数据库中时对它进行HTML转义,那么它就会遍布业务代码和/或数据库中.这是唯一的维护麻烦,当你在不同的地方进行操作时,你将面临双重逃避或更多的风险(例如&,&amp;而不是&让最终用户真正看到&而不是&在视野中.业务代码和数据库反过来对XSS不敏感只有该视图.然后,您应该逃避它只是在那里的视图.

也可以看看:

XSS攻击如何工作?视频#1

XSS攻击如何工作?视频#2


+1!如果只需要以某种方式将EL表达式配置为默认转义为html-转义,那么我们就不需要到处都有很多c:out了:

2> Vineet Reyno..:

使用两者.实际上,请参考类似于OWASP XSS Prevention备忘单的指南,了解输出编码和输入验证的可能使用情况.

在某些情况下,当您不能依赖输出编码时,输入验证会有所帮助.例如,您最好验证URL中出现的输入,而不是自己编码URL(Apache不会提供URL编码的URL).或者就此而言,验证JavaScript表达式中出现的输入.

最终,一个简单的拇指规则将有所帮助 - 如果您不完全信任用户输入,或者您怀疑某些源可能导致XSS攻击,尽管输出编码,请针对白名单进行验证.

请查看OWASP ESAPI源代码,了解输出编码器和输入验证器如何在安全库中编写.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有