web.xml文件中的7个错误的安全配置
web.xml文件中的7个错误的安全配置
关于Java的web.xml文件中配置认证和授权有大 量 的 文章。本文不再去重新讲解如何配置角色、保护web资源和设置不同类型的认证,让我们来看看web.xml文件中的一些常见的安全错误配置。
(1) 自定义的错误页面没有配置
默认情况下,Java Web应用在发生错误时会将详细的错误信息展示出来,这将暴露服务器版本和详细的堆栈信息,在有些情况下,甚至会显示Java代码的代码片段。这些信息对为他们的病毒需找更多信息的黑客来说是一种恩惠。幸运的是,通过配置web.xml文件来展示自定义的错误页面是非常容易的。使用如下的配置后无论服务器在任何时候发生HTTP500错误,一个非常好的错误页面就会被显示出来。你可以为HTTP状态码添加另外的错误页面。
1
2
3
4
|
< error-page > < error-softwaresecurity >500</ error-softwaresecurity > < location >/path/to/error.jsp</ location > </ error-page > |
另外,web.xml文件应该被配置以防止详细的错误堆栈信息被显示出来,我们可以通过配置<exception-type>来实现。因为Throwable是Java中所有Exception和Error的基类,下面的代码片段将很好的确保堆栈信息不被服务器显示。
1
2
3
4
|
< error-page > < exception-type >java.lang.Throwable</ exception-type > < location >/path/to/error.jsp</ location > </ error-page > |
然而,如果你采用如下的处理方式,你依然会将堆栈信息展示出来:
- <%
- try {
- String s = null;
- s.length();
- } catch (Exception e) {
- // don't do this!
- e.printStackTrace(new PrintWriter(out));
- }
- %>
这里请记住在合理配置了你的web.xml文件后,需要使用合理的日志记录技巧。
(2)绕过认证和授权
下面的代码片段展示了如何设置基于web的访问控制以便所有在”安全”目录中的一切只能被带有”admin”角色的用户访问。
1
2
3
4
5
6
7
8
9
10
11
|
< security-constraint > < web-resource-collection > < web-resource-name >secure</ web-resource-name > < url-pattern >/secure/*</ url-pattern > < http-method >GET</ http-method > < http-method >POST</ http-method > </ web-resource-collection > < auth-constraint > < role-name >admin</ role-name > </ auth-constraint > </ security-constraint > |
从常识观点来看,指定了GET和POST的<http-method>元素限定了*只有*GET和POST请求是被允许的。事实上不是这样,任意未列举的HTTP方法实际上都是允许使用的,即采用其他的HTTP方法可以绕过认证和授权。Arshan Dabirsiaghi有一个非常好的论文总结了该问题并向你展示了如何使用上述配置中未列举的任意的HTTP动词(像HEAD)和完全假冒的动词(像TEST或JUNK)来绕过web.xml中配置的认证和授权保护。
幸运的是,解决方案非常简单。仅仅需要从web.xml文件中移除<http-method>元素即可。
(3)SSL未配置
在所有使用敏感数据的应用中,SSL都应该被配置以保护数据传输安全。当然你可以在web服务器上配置SSL,但是一旦你的应用服务器设置了合适的SSL key,那么在应用急启用SSL是非常容易的。
1
2
3
4
5
6
|
< security-constraint > ... < user-data-constraint > < transport-guarantee >CONFIDENTIAL</ transport-guarantee > </ user-data-constraint > </ security-constraint > |
(4)未使用安全标示
很多web站点使用SSL进行认证,但是后面或者是阻止非SSL的的后续交互或者使得一部分网站内容仍然可以通过非SSL的访问。这使得会话的cookie(也就是JSESSIONID)容易受到session劫持攻击。要阻止它,cookie可以通过添加安全标志来创建,这确保了浏览器将不会在非SSL环境下传递cookie。
在Servlet规范的旧版本中,没有标准的方式来将JSESSIONID定义为安全的。现在在Servlet3.0中,<cookie-config>元素可以用于确保这个。
1
2
3
4
5
|
< session-config > < cookie-config > < secure >true</ secure > </ cookie-config > </ session-config > |
(5)未使用HttpOnly标志
cookie可以使用HttpOnly标志创建,这将确保cookie不能被客户端脚本访问。这帮助减轻了一些常见的XSS攻击。就像Security标志一样,旧版本的Servlet规范没有提供相应的支持。在Servlet3.0中可以如下的配置它:
1
2
3
4
5
|
< session-config > < cookie-config > < http-only >true</ http-only > </ cookie-config > </ session-config > |
除了Servlet3.0的这种新的标准的方式,旧版本的Tomcat允许在server.xml中使用供应商特定的useHttpOnly属性来启用它。该属性在Tomcat5.5和6中默认是禁用的。在Tomcat7中,该属性默认是启用的。因此即使你在web.xml中将其设置为false,然后部署在tomcat7中,除非你修改了server.xml文件,否则你的JSESSIONID依然是HttpOnly的。
(6) 使用URL参数来跟踪session
Servlet3.0规范中的<tracking-mode>允许你定义JSESSIONID是存储在cookie中还是URL参数中。如果会话ID存储在URL中,那么它可能会被无意的存储在多个地方,包括浏览器历史、代理服务器日志、引用日志和web日志等。暴露了会话ID使得网站被session劫持攻击的几率大增。然而,确保JSESSIONID被存储在cookie中非常容易:
1
2
3
|
< session-config > < tracking-mode >COOKIE</ tracking-mode > </ session-config > |
(7) 未设置会话超时时间
用户喜欢长时间的会话因为他们很方便。黑客喜欢长时间的会话因为他们有足够的时间来实施像session劫持攻击等。安全和可用性总是会出现冲突。一旦你知道如何使得你的会话存活,你可以按如下方法来配置活动时间:
1
2
3
|
< session-config > < session-timeout >15</ session-timeout > </ session-config > |
总结
构建和部署安全的应用需要从不同的受益人处获取需求。环境和配置和编码自身一样重要。通过思考这些常见的安全错误配置,希望你可以创建更加安全的应用。
web.xml文件中的7个错误的安全配置的更多相关文章
- web.xml文件中的web-app元素 部署
[转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...
- web.xml文件中加载顺序的优先级
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- 当你的Spring IOC 容器(即applicationContext.xml文件)忘记配到web.xml 文件中时
当你的Spring IOC 容器忘记配到web.xml 文件中时,启动服务器就会报错. 部分错误如下: Caused by: org.springframework.beans.factory.NoS ...
- WEB项目web.xml文件中classpath: 跟classpath*:使用的区别
引用一篇很不错的文章:http://blog.csdn.net/wxwzy738/article/details/16983935 首先 classpath是指 WEB-INF文件夹下的classes ...
- web.xml文件中配置ShallowEtagHeaderFilter需注意的问题
问题现象及解决方法 今天在Spring MVC应用中加入ShallowEtagHeaderFilter时,发现返回的响应中没有etag头,上网查了很多相关资料,也试了很多方法依然不起作用.在查看web ...
- web.xml 文件中一般包括 servlet, spring, filter, listenr的配置的加载顺序
首先可以肯定 加载顺序与他们在web.xml 文件中的先后顺序无关. web.xml 中 listener 和 serverlet 的加载顺序为 先 listener 后serverlet最终得出结果 ...
- 如何在web.xml文件中引入其他的xml文件(拆分web.xml)
转载自:http://www.blogjava.net/jiangjf/archive/2009/04/09/264685.html 最近在做一个Servlet+javaBean的项目,服务器用的是t ...
- web.xml文件中context-param、listener、filter、servlet的执行顺序
首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> ...
- web.xml文件中<mime-mapping>
http://blog.csdn.net/sccemstanford/article/details/9064155 ————————————————————————————————————————— ...
随机推荐
- 永洪BI配置测试及遇到的一些问题
1.连oracle 11g数据库遇到密码不能验证通过. 在11g中, 数据库默认密码的大小写是敏感的,jdbc在给oracle密码时, 会将其变成大写.其他个别情况也会出现变成小写的. 为统一,去除o ...
- 【MySQL】使用 Optimizer Trace 观察SQL执行过程
Optimizer Trace 是MySQL 5.6.3里新加的一个特性,可以把MySQL Optimizer的决策和执行过程输出成文本.输出使用JSON格式,便于程序分析和人类阅读. 使用方法 1) ...
- JS逻辑运算大于小于比较
遇到这个问题,结果测试了好半天终于发现原因, 例子: var az = $('#a').css('zIndex'); // 1001 var bz = $('#b').css('zIndex'); / ...
- CodeForces 702D Road to Post Office
答案的来源不外乎于3种情况: 纯粹走路,用时记为${t_1}$:纯粹乘车,用时记为${t_2}$:乘车一定距离,然后走路,用时记为${t_3}$. 但是${t_1}$显然不可能成为最优解. 前两个时间 ...
- 《JS权威指南学习总结--第7章 数组》
内容要点: 一. JS数组是无类型的:数组元素可以是任意对象,并且同一个数组中的不同元素也可能有不同的类型.数组的元素甚至也可能是对象或其他属性,这允许创建复制的数据结构,如对象的数组和数组的数组. ...
- 这两天dede 仿站的收货
首先学会了织梦的安装,其次学会了找织梦默认的模板目录在生成更新主页html和系统设置下的默认末班风格下,然后学会了写一些简单的循环输出代码,发现head2.htm没有找到,更新文件和缓存发现能用了
- jquery操作属性 attr()和 prop()兼容性问题
jquery1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 大家都知道有的浏览器只要写disabled,checked就可以了,而有的 ...
- 【同行说】Android图片处理技术资料汇总(一)
对于Android开发的童鞋们来说,图片处理时或多或少都会遇到令人头疼和不满意的问题,今天小编收集了5篇Android图片处理的干货文章,一起来看看吧! 一.Android 高清加载巨图方案 拒绝压缩 ...
- Spring contextConfigLocation默认加载文件的位置
在使用Spring框架的时候,如果我们使用的是XML文件配置Bean的方式的话,我们往往会在web.xml里面配置如下内容: <context-param> <param-name& ...
- 去掉matlab图片空白边缘
在图形文件figure的菜单上点击file->export setup size选项中,对"expand axes to fill figure"选项打勾,如下图: