Java web应用中的安全问题整理

原创 2017年09月10日 09:19:13

背景

几年前在CSDN的C币商城换购过一本《白帽子讲Web安全》,了解过Web网站在渗透测试过程中常见的安全问题。近来,自己开发的Java Web应用中存在一些安全漏洞,被迫要求关注这些安全隐患、并加固。

那么本文就顺便整理一下Java Web开发过程中容易忽略的几个安全问题吧,这些问题都能搜到,并且加固方式也不复杂。初学者或者对安全要求不高的开发流程中,很可能被忽略。

密码明文传输

当年初学Java Web时,简单的信息管理系统中,根本没有安全意识。仅仅靠表单的password类型掩盖了密码的表面形象而已。

但是,在实际应用中,这是个大问题,最初也知道这个问题,只是鉴于应用用户较少,而且只能处于内网环境中,就直接忽略了。但是表单中明文传送密码,的确不应该。最简单的方式是密码通过js加密传递到后台,然后Controller校验时直接取数据库中的密文进行匹配。

用户名被猜中

这个问题可能出现在密码校验逻辑中:校验结果的不同分支,返回给页面提示信息不同,密码错误和用户名不存在是两个不同分支中的。这样依一来,居心叵测者就可能通过多次输入并提交而猜中系统中可能存在的用户名。

这一点,Linux用户,Oracle用户,数据表的校验,处理都很高明,能预防敏感信息泄漏。(这点没有考证,初入职场时的入职培训老师讲过这些,印象较深刻,整理本文时就想起这几方面了。如有错误,欢迎指正!)

1 Linux的登录错误提示信息是统一的:用户名或密码错误!
2 文件目录一旦输入错误:统一提示文件或目录不存在的。
3 Oracle数据库查询操作查询时,如果表名称错误,提示信息是表不存在。

文件上传

文件上传最好使用专门的文件服务器,与当前web应用隔离开。如果条件不允许,应该用独于Web应用部署目录之外的目录,这样攻击者就不能通过web服务器内部的目录结构获取用户上传的文件信息了。

其次,对上传的文件的校验,处理页面空间的限制外,后台Controller也许要对对文件进行校验,比如文件名或这文件内容。因为攻击者发送的请求不是通过页面完成的,而是模拟表单请求的话,文件名称就可以是任意的。

所以,后台也应该对用户请求中的上传文件名称进行校验,保证只有系统允许的文件内容才能被处理。

文件下载

凡是涉及到文件下载的地方,应该提高安全意识,编码过程中,校验下载文件名称。应用下载文件的根目录应该是固定的,而且文件名称只能是最终名称,不能包含路径“.”的。

http://xxx/xxxx/download?fileName=./../.././../.././../.././../.././../.././../..//etc/passwd

如果一个文件下载请求中,直接使用用户请求的fileName参数,而不经过任何安全校验的话,那么不法分子就可能通过上述模拟请求下载到Linux服务器的密码文件。

加固措施为:校验文件名称参数,不能是包含路径的文件名称,只能是简单名称或者路径固定,即项目指定存放下载文件的路径。

表单输入校验

不能对用户的输入过于信任,所有的需要用户输入的地方,应该添加验证。例如:用户可以在一个input表单中输入js代码:

<script>   alert(new Date());
</script>

这就是典型的CRSF,跨站请求伪造;此外,如果一个input输入框里面,用户输入了html标签

</button>

而后台又没有进行任何拦截处理,那么该表单数据回显的时候,页面就会多一个button按钮了。

解决办法:可以在前端统一对页面的input进行限制不能输入html标签;然后在Controller层使用Filter,对用户输入的请求头域的数据进行预处理,拦截或者过滤输入信息中的有害数据。

重要模块的CRSF

在任何一个登录后的页面上,进入一个敏感数据添加页面如:用户添加页面。输入表单信息之后,将页面源码扒下来,存储htm文件,点击htm文件的表单提交,就可以通过CRSF表单提交数据到指定服务器。

敏感信息的所有操作应该添加token信息,这点我想起了微信工作平台开发API中,所有的操作都是需要Token信息的,那么这里Token的作用应该是一样的,防止攻击者伪造表单请求。

服务器版本信息泄漏

下图404页面,开发过程中经常见到,但是它会对Web应用造成什么威胁呢?

这里写图片描述

显然,它泄漏Web应用服务器的信息。攻击者在知道应用的服务器信息后,就可能利用对应版本的服务器的漏洞,发起进一步攻击行为。

这个问题主要是web应用的404、500等常见错误页面信息的配置不当导致的。增强安全意识,应该避免使用服务器默认的错误页面信息,在web.xml中增加自定义的错误页面配置信息。

    <!-- 配置系统错误显示的页面 -->
    <error-page>
        <error-code>500</error-code>
        <location>/error/500.html</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/error/404.html</location>
    </error-page>

启示录

安全是一件大事,如果一点都没有注意的话,我们的Java Web应用是不是分分钟就能被攻击者黑掉呢?
想起以前遇到过iteye这个网站被黑掉添加很多垃圾信息的情况.
树立安全意识,Too simple ! Too dangerous!

版权声明:本文为博主原创文章,未经博主允许不得转载。

常见Web应用安全问题(1 - 4)(一)

  经过上两篇(《Web安全性问题的层次关系》及《解读Web应用安全问题的本质》)关于Web安全及Web应用安全概念性知识的宏观介绍 ,相信大家已经有所感知了。从今天开始,我将陆续给大家介绍常见的We...
  • iwebsecurity
  • iwebsecurity
  • 2007年07月16日 17:42
  • 10392

web软件常见安全问题(个人总结)

1、SQL injection例如:post提交时有个url:http://www.xxx.com/news.asp?id=1SQL语句为:select * from news where id=1改...
  • wudeyaohehe
  • wudeyaohehe
  • 2007年08月08日 00:32
  • 1048

当我们谈Web应用安全的时候 主要谈哪些

在本文中,主要探讨Web应用程序的安全性,主要包括漏洞攻击者如何利用不安全的Web应用程序来危害整个服务器或者破坏一个网站、以及开发人员如 何避免引入这些漏洞。主要介绍业界几个需要被着重考虑的Web应...
  • nineteen73
  • nineteen73
  • 2016年07月07日 21:32
  • 1267

Java多线程安全问题及解决方案

Java多线程安全问题及解决方案 一、问题引入 通过最常见的多窗口售票问题引入线程安全的问题。代码如下: 注:这里使用Runnable接口来实现线程,这样做是为了共享代售票这个资源,如果我们使用继承T...
  • OONullPointerAlex
  • OONullPointerAlex
  • 2016年03月16日 22:17
  • 1545

如何解决 Java 安全问题?

如何解决 Java 安全问题,目前的应对策略都十分笨拙,往往适得其反。幸运的是,有一种新的方法可以将安全机制嵌入 Java 执行平台——或者更具体地说,嵌入 Java 虚拟机中,进而规避一些「Big ...
  • wangpeng198688
  • wangpeng198688
  • 2016年01月14日 15:32
  • 591

spring 异步处理@Async

最近刚要用到异步处理小结一下:异步执行:所谓异步,就是当执行A方法的过程中调用B方法,但是B方法并不影响A方法的执行效率,即使B方法没有执行结束还是会正常执行A方法。简单说异步执行就是先返回结果,再执...
  • mqsyoung
  • mqsyoung
  • 2017年09月19日 10:36
  • 216

Java WEB项目安全问题及解决方案

1.弱口令漏洞 解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或...
  • liangzi_lucky
  • liangzi_lucky
  • 2016年09月05日 16:43
  • 2618

大师之路解惑基础概念篇:Java Web应用开发中的一些概念

原文:http://developer.51cto.com/art/201005/201999.htm Java Web应用开发中的一些概念 学习Java Web开发。很多人喜欢直接上手去写...
  • wabiaozia
  • wabiaozia
  • 2015年12月15日 10:51
  • 2054

Java系列-JavaWeb复习资料整理

JAVA基础复习资料 1.JAVA关键字:final、finally、finalize、static 解析:简单区别 final 用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。...
  • Dream_angel_Z
  • Dream_angel_Z
  • 2015年04月24日 22:45
  • 1565

多线程_线程安全问题的产生原因分析

package cn.itcast_09; /* * 如何解决线程安全问题呢? * * 要想解决问题,就要知道哪些原因会导致出问题:(而且这些原因也是以后我们判断一个程序是否有线程安全问题的...
  • L1585931143
  • L1585931143
  • 2017年03月12日 20:06
  • 616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java web应用中的安全问题整理
举报原因:
原因补充:

(最多只允许输入30个字)