javaWeb项目安全性问题分析

这是给大佬的一封web项目安全性问题报告

前后台数据传输的安全性

此处为前后台分离项目的重点,主要包括身份验证、时间性以及防重复性。

通常的做法就是做sign加密,需要用到的是key和secret。key为用户标识,表明用户身份,即为目前项目中已存在的tokie,不足在于tokie应该添加过期时间,每次用户合法请求后更新用户过期时间;secret为密钥,在客户端加密时使用,在数据传输过程中不能包含sercet信息。客户端根据特定规则对所有请求数据进行加密后,后端获取到所提交的数据在用同样方式加密,然后对比sign参数是否一致,一致则说明数据在传输过程中未遭到篡改。

时效性问题建议身份验证时追加时间戳的校验。前端添加时间戳参数,后台校验误差不超过三分钟,同时校验用户身份key+IP用于防止url被盗取。

另外,有以下两点建议:

​ Cookie添加httpOnly参数。目前览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数。一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时 候),应用程序也一般不会在js里操作这些敏感Cookie。

​ 日志系统。增加后台的访问日志,新增日志表,记录来访者的IP,传递参数,记录操作内容,完善日志记录可以帮助发现潜在危险。同时可增加用户登陆记录表,包含用户ID,登陆IP,登陆时间等。用户连续登陆密码错误时,可进行验证码或者其他相关措施进行验证,防止暴力破解问题。

URL中参数显示问题

主要有三点:

  • 普通Get请求修改为Post请求
  • 参数加密(js加密,Java解密)
  • 使用https协议进行数据传输

文件上传漏洞

前台仅使用JS对文件后缀做了过滤,这只能针对普通的用户,而恶意攻击者可以通过修改表单去掉JS校验。

这里建议前后台同时进行上传的文件进行检验,具体文件类型视项目需求而定。

弱口令漏洞

后台文件中存储的均为明文密码。这里建议最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种加密方式叠加组合。

由于本项目数据库连接池使用druid,具体加密方式可参考官方文档。关于redis的安全问题,可参考Redis安全性配置

浏览器缓存问题

这一点仅作参考。合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。

解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:

httpResponse.setHeader("Cache-Control","no-cache"); 
httpResponse.setHeader("Cache-Control","no-store");
httpResponse.setDateHeader("Expires", 0);
httpResponse.setHeader("Pragma","no-cache");

本文链接:

https://blog.wfyvv.com/archives/19.html
1 + 6 =
快来做第一个评论的人吧~