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!

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

相关文章推荐

java在web开发安全性方面的总结

1.       客户输入的原始数据进行校验不依赖于Script。虽然JavaScript等等的客户端的输入数据的校验即使比较方便也不能使用因为安全性方面的原因。脚本是不安全的,用户可能屏蔽脚本,我们...

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

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

【常见Web应用安全问题】---2、SQL Injection

Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里只介绍常见、比较常见和有点常见的。  常见Web应用安全问题安全性问题的列表:   1、跨站脚本攻击(CSS or ...

【常见Web应用安全问题】---3、Code Execution

Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些。  常见Web应用安全问题安全性问题的列表:   1、跨站脚本攻击(CSS or...

Java Web应用动态生成PDF文件的问题整理

Java Web应用在给浏览器返回动态生成的PDF文件时,要确保发送的HTTP header消息中正确设置了相应参数,否则浏览器可能无法获取到或者获取到错误的PDF文件。整理了下这些参数的设置方法,还...

Java WEB安全问题及解决方案

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

Java Web 一些特殊字符的过滤(appscan检查的安全问题)

适用于出现以下问题: 1、SQL盲注 2、存储的跨站点脚本编制 或 跨站点脚本编制 import java.io.IOException; import java.util.Enumerati...

Java Web -- Servlet(7) Servlet的线程安全问题、ServletConfig对象

Servlet的线程安全问题   Servlet是一个供Servlet引擎(Web服务器)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。针对客户端的多次Servl...

Java Web并发访问的线程安全问题

多线程环境下如果访问单例对象,当对象内部有类变量或实例变量时,就可能存在安全性问题。 解决方法: 1.对操作共享变量的所用方法进行同步控制; 2.同步共享变量,例如Collections.synchr...

安全检测Java Web应用网站漏洞(下)

有了样板,我们来分析这套程序中可能出现的各种web漏洞。      1、SQL注入漏洞          从SQL注入漏洞说起吧,在web漏洞里,SQL注入是最容易被利用而又最具有危害性的...
  • ahhsxy
  • ahhsxy
  • 2012年02月28日 14:22
  • 861
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java web应用中的安全问题整理
举报原因:
原因补充:

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