示例代码:
- HttpServletRequest request =(HttpServletRequest)servletRequest;
- // 主机 ip 和端口 或 域名和端口
- String myhosts = request.getHeader("host");
- if(!StringUtils.equals(myhosts, "xx.xx.xxx.xxx:xxxx")
- !StringUtils.equals(myhosts, "xx.xx.xxx.xxx:xxxx")
- !StringUtils.equals(myhosts,"xx.xx.xxx.xxx:xxxx")StringUtils.equals(myhosts,"xx.xx.xxx.xxx")
- !StringUtils.equals(myhosts,"xx.xx.xxx.xxx") !StringUtils.equals(myhosts,"xx.xx.xxx.xxx" ){
- logger.error("====== 访问 host 非法, 已拦截 ======");
- response.sendRedirect(request.getContextPath() + "/login.jsp");
- return;
- }
8. 越权访问漏洞防护
如普通用户执行管理员用户的权限. 水平越权是指相同级别用户之间的越权操作.
配置 FILTER 拦截器, 对请求所有 URL 进行拦截, 对于需要进行授权的 URL 进行权限校验, 防止用户越权访问系统资源.
10. 弱口令漏洞
最好使用至少 6 位的数字, 字母及特殊字符组合作为密码. 数据库不要存储明文密码, 应存储 MD5 加密后的密文,
由于目前普通的 MD5 加密已经可以被破解, 最好可以多重 MD5 加密, 或者多种加密方式叠加组合.
校验密码不能与用户名相同, 修改密码时不能使用前五次或上次密码
增加验证码登录, 增加暴力破解的难度
增加用户锁定机制
10.JSP 页面抛出的异常可能暴露程序信息.
封装错误异常信息.
11. 本地缓存漏洞
合法用户 "注销" 后, 在未关闭浏览器的情况下, 点击浏览器 "后退" 按钮, 可从本地页面缓存中读取数据, 绕过了服务端 filter 过滤.
解决方案: 配置 filter 对存放敏感信息的页面限制页面缓存. 如:
- httpResponse.setHeader("Cache-Control","no-cache");
- httpResponse.setHeader("Cache-Control","no-store");
- httpResponse.setDateHeader("Expires",0);
- httpResponse.setHeader("Pragma","no-cache");
12. 文件上传漏洞.
项目中涉及上传下载未对文件大小以及类型进行验证, 可能导致不良用户上传有害文件, 危害服务器
解决方案: 文件上传时在前台对文件后缀名进行验证, 为避免通过特殊手段绕过了前端验证, 在文件 保存时再进行一次验证, 即前后台同时验证的道理.
13. 敏感信息泄露
故意制造异常的操作, 通过报错信息将敏感信息抛出来.
建议统一处理错误页面, 将错误信息存储在日志中.
14. 用户名密码未加密传输
1. 使用可逆的加密算法, 在客户端使用 JS 同时加密用户名和密码, 在后台解密进行登录操作.(有风 险)
2. 使用不可逆加密算法在前台加密密码 (只是密码), 当然在数据库里存储的密码也是使用相同 算法加密的 (安全性能较高)
15. 未设置跨站注入过滤器
不良用户通过编写 sql, 或者仿制页面盗取用户信息.
解决方案: 在系统中设置拦截器, 对 sql 语句和 JS 语句进行拦截, 具体需要拦截的词汇如下:
来源: http://www.bubuko.com/infodetail-2930868.html