项目背景描述
背景: 由于公司的项目上线需要符合安全标准。为平滑支撑项目业务上的持续发展,通过咨询和技术的手段推动信息安全的深入,通过渗透测试挖掘潜在问题,保障业务不会受到恶意攻击,从而提高核心化的信息竞争力。对本项目进行了渗透测试。测试结果存在的漏洞包括:
- 敏感信息泄露
- 未授权访问
- 越权访问(水平越权和垂直越权)
- 请求重放
- url中含有回话令牌
- XSS跨站脚本攻击
- CSRF跨站请求伪造
- 短信轰炸
- 短信验证码暴力破解
- 用户可枚举
- jQuery版本漏洞
下面将记录对以上几个类型的漏洞的修复的具体方案,持续更新(上班划水)…
项目没有申请HTTPS证书,几乎是从零开始搭建的,初始设计只是为了尽可能完成业务开发,犯了接口没有统一规范等毛病,可以说是安全问题中的几个大类全都踩坑了一遍→_→。
项目: 本项目主要是基于JSP+Servlet+SSM架构开发的小型Java项目。定义为面向兼容Android和IOS的各款手机的页面开发,对开发者而言:一次编写,各端运行;一套代码,套个壳子跨平台,所以项目中有不少的对接原生安卓的接口与调用,目前这里不作详细描述。
敏感信息泄露
漏洞描述
- 暴露用户名和明文密码;
- 请求响应报文中包含了完整的sql语句,暴露了详细数据库表的信息。
- 暴露了隐藏的登录页面
- 敏感数据包括不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据
通用解决方案
- 需要加密账号密码、手机号等敏感信息;
- 删除详细的报错信息,用统一模糊提示代替错误信息
- 删除非必要的页面,减小攻击面
修复过程
总而言之就是,项目所有接口都没有经过加密,请求与响应的数据都是明文传输,请求可能被截获导致数据泄露。
考虑到整个项目组开发统一原则,采用AES加密的方式对前后端数据传输(Base64编码)、接口对接Android客户端(字节流)进行加解密。
下面给出详细Demo与修复注意事项
有时间再更新20210527。。。