java项目安全性问题

本文详细讨论了Java项目中的安全问题,包括登录爆破、密码安全、跨站脚本攻击(XSS)、SQL注入、数据重复和数据安全。提出了增加登录错误限制、密码加密、防止XSS攻击、预编译SQL、使用分布式锁、禁止页面缓存、服务器端过滤文件上传和脚本数据、调整Java WEB容器配置、记录访问日志等解决方案,旨在提升Java项目的安全性。

java项目安全性问题

一、登录爆破
  • 问题:
    1. 登录无错误限制,可以无限制的错误尝试登录
  • 解决思路:
    1. 增加登录错误计数,达到一定数量就禁止用户登录一定时间
二、密码安全
  • 问题:
    1. 用户密码过于简单,容易被破解
    2. 用户登录、修改密码时用明文传输,可以被抓包工具获取
  • 解决思路:
    1. 用户设置、修改密码的时候对密码强度进行等级判定
    2. 数据加密,可使用RSA、MD5等加密算法
三、跨站脚本攻击(XSS)
  • 问题:
    1. 可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务
    2. 接口数据安全
  • 解决思路:
    1. 在用户提交的时候 判断脚本并且去掉相关信息
    2. https://blog.youkuaiyun.com/qq_28945959/article/details/114171863
四、SQL注入
  • 问题:
    1. 别人利用sql漏洞删库删表。
    2. 在这里插入图片描述
  • 解决思路:
    1. 代码层面最好的办法就是预编译

    2. 确认每种数据的类型,比如数字在数据库中必须使用int类型存储

    3. 规定数据长度,能在一定程度上放置sql注入

    4. 严格限制数据库权限,能最大程度减少sql注入的危害

    5. 过滤参数中含有的一些数据库关键词

    6. 在数据库访问层中不要使用“+”来拼接SQL语句!如:
      
      String sql= “SELECT * FROM USERS WHERE 1=1; if(null !=
      user.getUserName() && !””.equals(user.getUserName())){
      sql += “ and UNAME = ‘”+user.getUserName()+”’”; } 而应使用PreparedStatement。如:
      
      PreparedStatement pstmt = con.prepareStatement(“SELECT * FROM USERS
      WHERE UNAME=?); pstmt.setString(1, “Neeke”);
      如果项目中使用了Hibernate框架,则推荐使用named parameter。如:
      
      String queryString = “from Users where uname like :name”; 冒号后面是一个named
      parameter,我们可以使用Query接口将一个参数绑定到name参数上:
      
      List result = session.createQuery(queryString)
      .setString(“name”, user.getUserName())
      .list();
      
五、数据重复
  • 问题:
    1. 高并发情况下,多个线程同时插入or修改导致数据重复
  • 解决思路:
    1. 使用分布式锁
六、数据安全
  • 问题:
    1. 合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。

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

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

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

      • 解决方案:前台JS过滤加服务器端程序过滤。具体过滤掉哪些文件类型视具体情况而定。

    3. .可执行脚本漏洞。对用户提交的数据未转义,一些用户提交的含有JavaScript脚本的信息被直接输出到页面中从而被浏览器执行

      解决方案:使用org.apache.commons.lang.StringEscapeUtils对用户提交的数据进行转义。如:
      
      @RequestMapping(params=“method=addTopic”,method=RequestMethod.POST)
      public ModelAndView addTopic(HttpServletRequest request,
      HttpServletResponse response, BbsTopic topic) { BaseAdmin user =
      (BaseAdmin) request.getSession().getAttribute(Constant.SESSION_USER);
      topic.setBaseAdmin(user); topic.setTopicDate(new
      Timestamp(System.currentTimeMillis()));
      topic.setTopicContent(StringEscapeUtils.escapeHtml(topic.getTopicContent()));
      topic.setTopicTitle(StringEscapeUtils.escapeHtml(topic.getTopicTitle()));
      this.bbsTopicService.save(topic); return new ModelAndView(new
      RedirectView(“bbs.do?method=topicList&bfid=+ topic.getBfid())); }
      
    4. Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。

      • 解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。

    5. 日志,建议增加服务器的访问日志,记录来访者的IP,传递参数,对后台操作用户建立日志,记录操作内容,完善日志记录可以帮助你发现潜在危险,找到已经发生的问题。

    6. 僵尸网络暴力破解

    7. 重放攻击

    8. 登陆表单http明文提交

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

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

    11. 点击劫持,大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不值钱的情况下点击透明的iframe页面,二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指陆为码

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值