• 网上安全方面的涉及到的方面(详解)


    关注公众号: 了解java相关学习资料

                                                                             

    1. 防止sql注入的逻辑:

    1).服务端使用Filter对于访问者的输入的字符进行过滤。
    2).通过正则表达式对于页面的文本框输入的数据进行限制可以减少过滤检验存在的漏洞。
    3).使用prepareStatment预编译sql语句

    2. XSS 跨站脚本攻击:
    1).输入过滤。对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”等可
    能导致脚本注入的特殊字符,或者过滤“script”、“javascript”等脚本关键字,
    或者对输入数据的长度进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,
    使用十六进制编码来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相应的过滤。
    只要能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS攻击。
    2).输出编码。通过前面对XSS攻击的分析,我们可以看到,之所以会产生XSS攻击,就是因为Web应用程序将用
    户的输入直接嵌入到某个页面当中,作为该页面的HTML代码的一部分。因此,当Web应用程序将用户的输入数据
    输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后再输出到目标页面中。这样,
    如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行.
    3.CSRF跨站请求伪造漏洞防护 : 解决方案:配置FILTER拦截用户所有请求(POST/GET),对用户请求
    Referer头URL进行合法性校验。
    4. URL链接注入漏洞防护 :配置FILTER拦截用户所有请求,对用户参数进行关键字符校验进行合法性校验。
    5、会话COOKIE中缺少HttpOnly防护:
    兼容浏览器接收到HttpOnly cookie,那么客户端通过程序(JS脚本、Applet等)将无法读取到Cookie信息,
    这将有助于缓解跨站点脚本威胁。
    利用HttpResponse的addHeader方法,设置Set-Cookie的值
    cookie字符串的格式:key=value; Expires=date; Path=path; Domain=domain; Secure; HttpOnly

    Servlet 2.5 API 不支持 cookie设置HttpOnly

    response.setHeader("SET-COOKIE","JSESSIONID=" + sessionid + "; HttpOnly");
    6.点击劫持漏洞(Clickjacking)防护
    点击劫持是一种视觉上的欺骗手段,攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,
    此时用户在不知情的情况下点击了透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
    解决方案:
    配置FILTER拦截器,在服务器端返回请求中,使用一个HTTP头“X-Frame-Options”值为SAMEORIGIN-同源策略 ,
    则frame页面的地址只能为同源域名下面的页面,防止点击劫持漏洞发生。
    示例代码:
    HttpServletResponseresponse=(HttpServletResponse)paramServletResponse;

    response.addHeader("x-frame-options","SAMEORIGIN");
    7.HTTP host 头攻击漏洞 使用HTTP代理工具,可以篡改HTTP报文头部中HOST字段时,该值可被注入恶意代码。
    因为需要控制客户端的输入,故该漏洞较难利用。

    解决方案:
    配置FILTER拦截器,对请求输入HOST头信息进行信息安全性校验,防止HOST头信息被恶意篡改利用。

    示例代码:
    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语句进行拦截,具体需要拦截的词汇如下:

    ((alert|iframe|frame|ascii||script|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|delay|

    waitfor|char|declare|sitename|netuser|xp_cmdshell|or|like’|exec|execute|insert|create|”+”table|
    from|grant|use|group_concat|column_name|information_schema.columns|table_schema|union|where|”+”
    reg|between|having|groupby|groupby|waitfor|waitingfor|#|cast|convert|window|local|location|”+”–|like))。
    17.短信轰炸
    发送短信验证码未进行次数限制,可以不断发送短信验证码,导致一定的经济损失。
    解决方案:建议对发送的短信验证码进行频率限制,一段时间内仅仅发送多少条短信。
    18.注释信息泄露
    在开发过程中会存在将暂时不用的代码注释,以备后续使用的情况,这就导致了重要信息泄露。
    解决方案:及时删除注释代码,有价值代码在本地备份。
    19.任意URL恶意跳转可能会导致钓鱼等风险。
    解决方案:改变传值方式,可以在前台传入对应type,根据type跳转到页面

    --------------------------------------------------------------------------

    老铁福利:

    本公众号是分享知识,共同学习、交流的平台,欢迎大家踊跃推荐,共同打造一个共建共享的平台!作为礼物: 回复以下文字可自动获取相关资料:

    回复:"高并发"可获取 JAVA高并发秒杀系统实战系列视频
    回复“jvm” 可获取深入理解java虚拟机电子书以及全套视频讲解资料
    回复“javase” 可获取 java基础相关的整理资料;
    回复“html” 可获取html+css+js 相关的整理资料;
    回复“shm” 可获取Struts+Hibernate+MyBatis相关的整理资料;
    回复“数据库” 可获取数据库相关知识整理资料;
    回复"springcloud" 可获取Spring Cloud微服务实战电子书;
    回复:"鸟哥" 可获取鸟哥linux 私房菜相关的电子书;
    更多的惊喜敬请期待!

    微信扫一扫

  • 相关阅读:
    如何巧妙着运用「位运算」来解决问题?
    一文读懂一台计算机是如何把数据发送给另一台计算机的
    Java集合与泛型中的几个陷阱,你掉进了几个?
    【链表问题】打卡10:将搜索二叉树转换成双向链表
    【链表问题】打卡9:将单链表的每K个节点之间逆序
    【链表问题】打卡8:复制含有随机指针节点的链表
    单例模式中的volatile关键字
    链表回文判断(基于链表反转)—Java实现
    设计模式之单例模式
    Spring的IoC与AOP的理解
  • 原文地址:https://www.cnblogs.com/wangdong811/p/10307653.html
Copyright © 2020-2023  润新知