Java Web安全测评--开发细节

java 专栏收录该内容
31 篇文章 0 订阅

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



     本文由笔者在Java Web应用中,对安全性开发的过程中的一些技术积累,对安全性没啥概念的童鞋可以参考下(大神请绕道,不喜勿喷)。由于所在公司请了专门的软件安全公司,需要对公司的项目做安全性测评,针对测评公司提出的建议,具体思路如下本文只提供思路,不提供具体细节)。




================= Java Web安全测评--开发细节=================


一、密码复杂度
1、长度要求:8-20位
2、字符要求:数字与字母组合



二、登陆失败次数的处理策略
1、失败3次、给图片验证码
2、失败5次、该用户暂时不能登陆,设置多长时间后才能登陆(可以自定义,一般10分钟到半小时左右)
3、用户名或密码错误时,提示应为“用户名或密码错误”,防止爆破用户名



三、多步骤操作的连续性(找回密码一、二、三)
1、最少要两次鉴权,如手机验证、邮箱(或密保问题)验证
2、用户在找回密码的过程中,必须按照步骤来,不能跨步骤进行(非法访问)
3、禁止自动显示手机号码




四、全站https
1、证书申请
2、配置Cookies中的session的HttpOnly和Secure标识:tomcat中的server.xml中的http容器中增加配置 secure="true",tomcat中的context.xml中的 配置 useHttpOnly="true"
3、更改相关web项目中的静态资源路径为相对路径
4、conf/catalina.properties文件,在最后添加org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false 
5、有下载模板文件的,需要在conf/server.xml里面的http节点中添加 useBodyEncodingForURI="true"




五、防请求头攻击
1、pom.xml文件中域名统一管理,不同的环境调用不同的域名。
2、添加过滤器:com.xxx.framework.mvc.filter.InjectFilter
3、java代码、配置文件、静态资源文件,如有用到域名的,需从pom.xml中获取(maven-war-plugin打包,需要排除doc模板、exele模板、字体、图片等文件)





六、SessionId防篡改/防止越权
1、登陆后 sessionId的值加密存储到cookie中,如cookie.set("SAFE_COOKIE_NAME","")
2、增加过滤器com.xxx.ucenter.filter.CookieFilter,校验cookie中的这个数据是否被篡改
3、用户退出系统后,移除该cookie
4、登陆成功需更换session会话ID,sesison需绑定IP



七、敏感信息加密存储
1、手机号码、邮箱地址等私密信息 在数据库层面进行加密、解密处理
2、数据库建立加密(FUN_ENCRYPT_AES)、解密函数(FUN_DECRYPT_AES)
3、sql里面进行调用加解密函数
4、web应用代码的配置文件需要加(密至少包括数据库账号、IP、密码、银行支付的密钥、FTP账号密码、email账号密码等)




八、完善系统日志

1、要有日志查询的功能,含操作人、操作时间、ip、应用名、操作动作、操作动作结果、备注、描述等。
2、隐私信息显示时要脱敏处理
3、异步记录用户登陆的log信息(含用户id、账号、ip、登陆结果、ip、userAgent、登陆时间等信息)





九、防xss攻击:
1、增加过滤器:com.xxx.ucenter.filter.XSSFilter
2、核心过滤的类:com.xxx.framework.util.StringUtil.cleanXSS()
3、注意:controller层中,入参有做URLDecoder.decode操作的,必须要使用StringUtil.cleanXSS()进行处理。





十、脏词、敏感词、非法词过滤
1、建立脏词数据表、填充数据。(参考数据表:SYS_ILLEGAL_WORDS)
2、用的时候存redis
3、后台管理中心必须要有维护的功能(增删改查),也要能刷新存在redis的缓存
4、建立过滤器com.xxx.ucenter.filter.IllegalWordFilter,基于HashMap、DFA算法模型去做匹配
5、规则:匹配到脏词后,可以用 "*" 替换
6、排除:个别的参数、url不需要做脏词过滤。如用户名、密码、验证码、带签名的url






十一、错误页面
1、可以有个简短的中文提示,但禁止抛出异常信息的堆栈
2、最好有个全局的异常处理器




十二、其他细节:
1、网站中必须声明:不得发布《互联网信息服务管理办法》规定的"九不准"
2、Session过期策略, web.xml中设置:<session-timeout>10</session-timeout> <!--单位为分钟-->
3、日志系统,不能删除、修改数据(需要DBA配合修改)
4、Tomcat/Nginx:禁止访问指定后缀的文件,如*.xml等
5、重要的form表单添加CSRF防护token或图形验证码(即一次性随机令牌)
6、sql注入:druid开启防SQL注入的配置,druid.filters=stat,wall(有可能因sql语句不规范,导致druid监控无法使用而报错)




================= Java Web安全测评--开发细节 =================

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



十三、网上摘录的其他细节:


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

2.未使用用户名及密码登录后台可直接输入后台URL登录系统。
解决方案:通过配置filter来过滤掉无效用户的连接请求。


3.合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。
解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:
httpResponse.setHeader("Cache-Control","no-cache"); 
httpResponse.setHeader("Cache-Control","no-store");
httpResponse.setDateHeader("Expires", 0);
httpResponse.setHeader("Pragma","no-cache");


4.Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。
解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。


5.重放攻击


6.僵尸网络暴力破解


7.千万不要乱用数据类型,使用基本数据类型,少用包装类,包装类容易被攻击,不要用string去接受所有类型数据。原则上:是什么类型就用什么类型去接收。


8.通过架构设计,添加一层设置处理http参数。一般都是通过aop来实现.比如:对邮件,手机验证对整数最大值验证,对字符串最大长度验证


9.点击劫持,大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不值钱的情况下点击透明的iframe页面,二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义。
  • 1
    点赞
  • 0
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

lizhou828

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值