精华内容
下载资源
问答
  • 测试后台管理系统思路和方法

    万次阅读 多人点赞 2019-08-01 14:02:53
    每个公司不管做什么业务,开发网站,app或者公众号亦或小程序,但凡涉及到用户...下面是我总结的测试思路和方法,可能有很多不足之处,希望多多评论补充 第一步,分析需求文档和原型图,原型图最好看有交互效果的...

    每个公司不管做什么业务,开发网站,app或者公众号亦或小程序,但凡涉及到用户信息或者订单信息都有对应的后台管理系统,所以每个测试人员基本上都有测试过后台管理系统的经验,但是后台管理系统测试不仅仅是基本的增删改查测试,还需要进行业务逻辑测试,还有兼容性测试,接口测试和压力测试。下面是我总结的测试思路和方法,可能有很多不足之处,希望多多评论补充

    第一步,分析需求文档和原型图,原型图最好看有交互效果的那种

    第二部,比照着原型图和需求文档,开始一步一步测试,我的习惯是从登录页面开始,以防止登录页面被漏掉

     登录页面测试要点

     UI界面测试

           1.布局是否合理,输入框是否对齐,输入框内是否有提示语

      2.登录框的颜色和背景颜色是否匹配,字体颜色要明显

      3. 界面的设计风格是否与UI的设计风格统一

      4. 界面中的文字简洁易懂,没有错别字

    功能测试

           1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。(正常输入)

      2.输入错误的用户名或者密码, 验证登录会失败,并且提示相应的错误信息。(错误校验)

      3.登录成功后能否能否跳转到正确的页面(低)

      4.用户名和密码,如果太短或者太长,应该怎么处理(安全性,密码太短时是否有提示)

      5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况(是否做了过滤)

      6.记住用户名的功能

      7.登陆失败后,不能记录密码的功能

      8.用户名和密码前后有空格的处理

      9.密码是否加密显示(星号圆点等)

           10.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确

           11.如果登录功能启用了验证码功能,在用户名和密码正确的情况下,输入正确的验证码,验证是否登录成功

           12. 如果登录功能启用了验证码功能,在用户名和密码正确的情况下,输入错误的验证码,验证是否登录失败,且提示信息正确

           13.如果登录功能需要验证码,点击验证码图片或者点击换一张是否可以更换验证码,更换后的验证码是否可用

           14.刷新页面是否会刷新验证码,

           15.如果验证码有时效性,需要分别时效性内和时效性外验证码的有效性

           16.不同级别的用户,比如管理员和普通用户,登录系统后权限是否正确

           17.输入栏是否设置快速删除按钮

           18.若支持手机号+验证码登录,验证码是否有时间限制,移动设备是否可以直接获取验证码

           19.快捷键Tab和Enter等,是否可以正常使用

           20.后台系统创建的用户第一次登录成功时,是否提示修改密码

    兼容性测试

           1. 不同浏览器下,验证登录页面的显示以及功能正确性

           2. 如果有移动端不同移动设备终端的不同浏览器下,验证登录页面显示以及功能的正确性

           3. 不同分辨率的界面下,验证登录页面的显示以及功能正确性

           4. 不同的操作系统 Windows, Mac

    安全性测试

          1.密码输入框是否不支持复制粘贴

          2.用户名和密码是否通过加密的方式,发送给Web服务器

          3.用户名和密码输入框分别输入典型的SQL注入攻击字符串,如在用户名字段中输入: 'or 1=1或是在密码字段中输入:'or 1=1,

             可以验证是否可以登录

          4.错误登陆的次数限制

          5.密码的强弱性,复杂度校验

          6.是否可以用抓包工具抓到的请求包直接登录

    性能测试

          1.单用户登录的响应时间是否小于3秒

          2.高并发场景下用户登录的响应时间是否小于5秒  

          3.打开登录页面需要多长时间

    首页

     一般公司的后台管理系统都是有首页的,用于展示和公司业务相关的信息或者文档,测试这部分主要看一下界面排版是否对齐,是否符合UI设计,字体大小是否合适(对比原型图或需求文档的要求),是否有错别字,各个点击跳转是否正确,各个模块有无缺失

    内容测试流程

    后台管理系统最基本就是增删改查,然后就是配合业务端进行数据测试,我一般都是按照各个模块由上到下分别测试,有数据关联的模块,结合着测试

    基本功能,增删改查和搜索的测试请参考如下地址https://www.cnblogs.com/wysk/archive/2018/01/05/8193091.html

    业务逻辑测试

    公司的后台管理系统都是用来存放用户或者订单等信息,所以一定要结合业务端的数据对系统进行测试,比如我在app上发布了一个订单信息,要看一下后台有没有该条订单,订单所在位置对不对,且订单各个数据是否正确,数据排版是否正确,在app上进行订单确认或者支付等操作,后台显示的订单状态是否正确,显示的信息是否和app上一致,这部分需要结合项目的实际情况,考虑用户在各种情况下可能的操纵来进行测试

    权限测试

    一般每个后台管理系统都有自己的权限控制,主要是看哪些菜单哪些人可以看,哪些人不能看

    1.明白各个角色的权限

    2.为每个角色设置用户

    3.分别登录这些用户查看相应的菜单权限显示的是否正确

    4.设置权限时要注意测到各种情况,比如没有一级菜单的权限,或者只有某些二级菜单的查看的权限,或者只选择一级菜单下的某些二级菜单

    先更到这里,之后还有总结的再补充

     

     

     

     

    展开全文
  • 了解信息安全管理体系的基本思路

    千次阅读 2018-03-26 10:34:39
    为便于信息安全管理体系的理解与应用,现结合ISO/IEC27001:2016、GB/T22080-2016/ISO/IEC27001:2013及GB/T22081-2016/ISO/IEC27002:2013的相关要求,进行管理基本思路的整理,供参考。1 信息也是资产,值得或...

    为便于信息安全管理体系的理解与应用,现结合ISO/IEC270012016GB/T22080-2016/ISO/IEC270012013GB/T22081-2016/ISO/IEC270022013的相关要求,进行管理基本思路的整理,供参考。

    1  信息也是资产,值得或需要保护以防范各种危害

    所有类型的组织都会收集、处理、存储和传输各种形式的信息,如语音、文字等。信息的价值已经超越文字、数字和图像的本身。

    在互联世界中,信息和相关过程、系统、网络及其操作、处理与保护活动中所涉及的人员都是资产,与其他重要的业务资产一样,对组织的业务至关重要。

    资产易遭受故意和意外的威胁,且相关的过程、系统、网络和人员均有其固有的脆弱性(可以被一个或多个威胁利用的组织或资产的弱点)。业务过程和系统的变更或其他外部变更都有可能产生新的信息安全风险。

    考虑到威胁利用脆弱性损害组织的途径多种多样,信息安全风险始终存在。

    有效的信息安全通过防范威胁和脆弱性使组织得到保护来减少风险,从而降低对其资产的影响。

    2  信息安全管理体系可以系统地管理信息安全

    信息安全主要包括保持信息的保密性、完整性和可用性

    保密性即信息不能被未授权的个人、实体或者过程利用或知悉的特性;

    完整性指准确和完备的特性;

    可用性指根据授权实体的要求可访问和使用的特性。

    信息安全单纯通过技术手段实现有一定的局限性,需要从系统全局的角度进行完善的管理,其中可通过GB/T22080-2016/ISO/IEC270012013实现信息安全的管理。

    3  识别信息安全要求是第一步

    确定信息安全要求是管理的出发点。安全要求一般有三个来源:组织自身的风险点,组织及其相关方的外部要求,组织为支持自身运行,针对信息的操作、处理、存储、通信和归档而建立的原则、目的和业务要求等。

    4  信息安全风险评估

    结合组织的战略及内外部环境,发挥领导作用,通过建立的信息安全风险准则,进行系统的信息安全风险识别,并对识别出的风险进行分析评估,确定风险优先级别。

    5  信息安全风险处置选项

    在考虑风险评估结果的基础上,选择需要控制的适合的信息安全风险处置选项,确定所必需的所有控制。

    6  选择和实施信息安全控制措施

    将选择的所有控制与标准附录进行对照,并验证没有忽略必要的控制。控制措施可从标准给出的指标中选择,也可以特定设计。其中附录给出了14个安全控制、35个主要安全类别和114项控制措施。当有不适用时,制定适用性声明。

    制定正式的信息安全风险处置计划,获得风险责任人对计划及对信息安全残余风险的接受的批准。

    具体实施以上及实现组织信息安全目标的支撑性计划,包括对外包过程的管理。

    7  持续改进

    监视、保持和改进与组织信息资产相关的安全控制措施的有效性, 实现持续改进

    8  适用性说明

    当标准中给出的控制措施对应的信息安全风险处置选项不适用时,应当制定一个适用性说明,包含必要的控制及其选择的合理性说明(无论该控制是否已实现),以及对GB/T22080-2016/ISO/IEC270012013标准附录A控制删减的合理性说明。

    当然可以增加一些标准附录外的特定控制,此时可给出与标准可用条款的交叉应用,以支持业务伙伴或其他相关方查看。

    9  信息的生命周期考虑

    信息在不同的生命周期阶段,包括构思、规约、设计、开发、测试、实现、使用、维护,并最终退役和销毁中,其资产的价值和所面临的风险可能会发生变化,如上市公司的报表信息在发布前后面临的窃取或泄露所产生的危害是不同的。在每一阶段上应当考虑信息安全。

    展开全文
  • Java锁优化的思路和方法

    千次阅读 2019-06-24 21:47:34
    锁优化的思路和方法 锁本质上是一种阻塞的方法,相对于无锁的同步方法性能上会差一点。 对锁的优化只是一定程度上尽可能提高锁的性能: a.减少所持有时间 只对有同步要求的代码块进行加锁 b.减少锁粒度 以HashMap为...

    锁的优化

    锁优化的思路和方法
    锁本质上是一种阻塞的方法,相对于无锁的同步方法性能上会差一点。
    对锁的优化只是一定程度上尽可能提高锁的性能:
    a.减少所持有时间 只对有同步要求的代码块进行加锁
    b.减少锁粒度 以HashMap为例,实现它的同步,只需要对其get、set方式使用互斥量同步即可实现其线程安全
    c.锁分离 使用读写锁,区分读、写操作
    d.锁粗化 两个同步模块之间如果存在执行时间段的代码块,合并两个同步模块,核心思想减少获取锁的次数。
    e.锁消除 避免对不可能被共享的对象进行加锁操作
    f.虚拟机内部对锁的优化:偏向锁、互斥锁、自旋锁(使用synchronized时的默认操作)

    • 偏向锁:锁会偏向于当前已经占有锁的线程
    • 轻量级锁:轻量级锁是一种快速的锁定方法
    • 自旋锁:利用互斥锁,达到只有一个线程访问该对象的目的 ,同时不会使调用者睡眠。

    虚拟机内部尝试使用锁的步骤:
    先尝试使用偏向锁,失败的情况下,
    再尝试使用轻量级锁,失败的情况下,
    再 尝试使用自旋锁,失败的情况下,
    尝试使用使用普通锁,再失败的情况下,
    对线程进行OS层面的挂起

    ThreadLocal
    ThreadLocal来管理局部变量,从而实现具备变量的线程同步
    场景:局部变量如果被多线程访问,要实现对有数据冲突的变量的要进行线程同步(数据可能会变化)

    //只改Bank类,其余代码与上同
            public class Bank{
                //使用ThreadLocal类管理共享变量account
                private static ThreadLocal<Integer> account = new ThreadLocal<Integer>(){
                    @Override
                    protected Integer initialValue(){
                        return 100;
                    }
                };
                public void save(int money){
                    account.set(account.get()+money);
                }
                public int getAccount(){
                    return account.get();
                }
            }
    

    ThreadLocal.set()//保证线程安全的情况下设定值 set不能使用对象的拷贝(不能使用引用,只能 new一个对象)
    ThreadLocal.get() //保证线程安全下获取值

    在这里插入图片描述

    展开全文
  • HTTP主要安全漏洞解决思路

    千次阅读 2019-01-09 15:50:28
    本博客整理自图解HTTP众多网络文章,对HTTP完全漏洞进行梳理,并介绍了java解决方案。... 虽然HTTP协议本身不在安全性问题,但是因为协议本身不包含会话管理、加密处理的要求,因此使用HTTP开发的应用服务器容...

         本博客整理自图解HTTP和众多网络文章,对HTTP完全漏洞进行梳理,并介绍了java解决方案。

          简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象,但是HTTP应用的服务端和客户端以及web应用资源是主要的攻击目标。

         虽然HTTP协议本身不在安全性问题,但是因为协议本身不包含会话管理、加密处理的要求,因此使用HTTP开发的应用和服务器容易成为攻击对象。如远程登录SSH协议,SSH具备协议级别的认证和会话管理等,比HTTP就安全性来说就做的更好。也因为如此HTTPS才在越来越多的场合替代HTTP协议,强制要求使用HTTPS。

    一、攻击模式

         针对web应用的攻击模式主要有:     主动攻击 和     被动攻击

    1. 以服务器为目标的主动攻击

    指通过直接访问web应用,把攻击代码传入的攻击模式。典型的攻击有:sql注入攻击、os命令注入攻击

    1. 以服务器为目标的被动攻击

    被动攻击(passive attack)是利用圈套策略执行攻击代码的攻击模式。典型攻击为跨站脚本攻击和跨站请求伪造

    1. 诱使用户触发已经设置好的陷阱,启动发送已嵌入攻击代码的http请求
    2. 用户的浏览器和邮件客户端会触发陷阱
    3. 中招的用户浏览器会把含有攻击代码的http请求发送给目标web应用
    4. 执行完攻击代码存在安全漏洞的web应用会成为攻击者的跳板,导致用户所持cookie个人信息被窃取,登陆装填中的用户权限被恶意滥用。

    二、典型攻击

    2.1、跨站脚本攻击( Cross-Site Scripting, XSS)

    可以在正常的url中嵌入js脚本,设置陷阱,引诱用户点击此非法连接后,输入自己的个人信息,结果个人信息被js脚本传递给攻击者。用户很难意识到自己的登陆信息已经泄露,利用跨站脚本可以窃取用户的cookie。

    举例:

    http://www.test.com/msg.php?send=Hello,World!

    接收者将会接收信息并显示Hello,Word

    非正常发送消息:

    http://www.test.com/msg.php?send=<script>alert('I am here!')</script>

    接收者接收消息显示的时候将会弹出警告窗口

    可以想像如果在script里面嵌入一个远程脚本,那么可能带来很不好的后果。

    分析:

    过于信任客户端提交的数据!因此解决思路就是不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

    解决办法:

    Java Web应用的解决办法:进行提交信息的过滤。

    1)web.xml中增加过滤器配置

    <filter>
    
        <filter-name>xssFilter</filter-name>
    
        <filter-class>com.test.xss.XssFilter</filter-class>
    
    </filter>
    
    <filter-mapping>
    
        <filter-name>xssFilter</filter-name>
    
        <url-pattern>/*</url-pattern>
    
    </filter-mapping>

    1.创建XssHttpServletRequestWrapper

     public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { 
    
        HttpServletRequest orgRequest = null; 
    
        public XssHttpServletRequestWrapper(HttpServletRequest request) { 
            super(request); 
            orgRequest = request; 
        } 
    
        /**
         * 覆盖getParameter方法,将参数名和参数值都做xss过滤。<br/>
         * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/>
         * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
         */ 
    
        @Override 
    
        public String getParameter(String name) { 
    
            String value = super.getParameter(xssEncode(name)); 
            if (value != null) { 
                value = xssEncode(value); 
            } 
            return value; 
        } 
    
        /**
         * 覆盖getHeader方法,将参数名和参数值都做xss过滤。<br/>
         * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/>
         * getHeaderNames 也可能需要覆盖
         */ 
    
        @Override 
    
        public String getHeader(String name) { 
    
            String value = super.getHeader(xssEncode(name)); 
            if (value != null) { 
                value = xssEncode(value); 
            }
            return value; 
        } 
    
        /**
         * 将容易引起xss漏洞的半角字符直接替换成全角字符
         * @param s
         * @return
         */ 
        private static String xssEncode(String s) { 
            if (s == null || s.isEmpty()) { 
                return s; 
            } 
    
            StringBuilder sb = new StringBuilder(s.length() + 16); 
            for (int i = 0; i < s.length(); i++) { 
                char c = s.charAt(i); 
                switch (c) { 
                case '>': 
                    sb.append(">");// 转义大于号 
                    break; 
                case '<': 
                    sb.append("<");// 转义小于号 
                    break; 
                case '\'': 
                    sb.append("'");// 转义单引号 
                    break; 
                case '\"': 
                    sb.append(""");// 转义双引号
                    break; 
                case '&': 
                    sb.append("&");// 转义& 
                    break; 
                case '@': 
                    sb.append("@");// 转义@
                    break;
                case '%': 
                    sb.append("%");// 转义%
                    break;
                case '(': 
                    sb.append("(");// 转义(
                    break;
                case ')': 
                    sb.append(")");// 转义)
                    break;
                case ',': 
                    sb.append(",");// 转义,
                    break;
                case '.': 
                    sb.append("。");// 转义.
                    break;
                case ';': 
                    sb.append(";");// 转义;
                    break;
                case '|': 
                    sb.append("|");// 转义|
                    break;
                default: 
                    sb.append(c); 
                    break;  
                } 
            } 
            return sb.toString(); 
        } 
    
        /**
         * 获取最原始的request
         * @return
         */ 
    
        public HttpServletRequest getOrgRequest() { 
            return orgRequest; 
        } 
    
        /**
         * 获取最原始的request的静态方法 
         * @return
         */ 
        public static HttpServletRequest getOrgRequest(HttpServletRequest req) { 
            if (req instanceof XssHttpServletRequestWrapper) { 
                return ((XssHttpServletRequestWrapper) req).getOrgRequest(); 
            } 
            return req; 
        } 
    
    }

    2.创建Filter

    public class XssFilter implements Filter {
     @Override
     public void init(FilterConfig filterConfig) throws ServletException {
     }
    
     @Override
     public void doFilter(ServletRequest request, ServletResponse response,
     FilterChain chain) throws IOException, ServletException {
    
     XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
     (HttpServletRequest) request);
     chain.doFilter(xssRequest, response);
     }
    
     @Override
     public void destroy() {
     }
    }

    2.2、Sql注入攻击

    指对于web应用使用的数据库,通过运行非法的sql产生攻击,这种攻击就叫做sql注入(sql Injection)。非法注入攻击可能有如下影响:

    1)非法查看和篡改书库内的数据

    2)规避认证

    3)执行和数据库服务器业务相关的程序

    举例来说:

    在登陆页面,填好正确的用户名(admin)和密码(admin123)后,点击提交,将会返回给我们“欢迎管理员”的界面。
    因为根据我们提交的用户名和密码被合成到SQL查询语句当中之后是这样的:
          select * from users where username='admin' and password=md5(admin123)
    很明显,用户名和密码都和我们之前给出的一样,肯定能够成功登陆。但是,如果我们输入一个错误的用户名或密码呢?很明显,肯定登入不了吧。恩,正常情况下是如此,但是对于有SQL注入漏洞的网站来说,只要构造个特殊的“字符串”,照样能够成功登录。
      比如:在用户名输入框中输入:’or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:
          select * from users where username='' or 1=1#' and password=md5('')
      语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:
          select * from users where username='' or 1=1#' and password=md5('')
      等价于
          select * from users where username='' or 1=1
      因为1=1永远都是成立的,即where子句总是为真,将该sql进一步简化之后,等价如下select语句:
          select * from users
      没错,该sql语句的作用是检索users表中的所有字段
           我们利用万能语句(’or 1=1#)能够登录!一个经构造后的sql语句竟有如此可怕的破坏力,相信你看到这后,开始对sql注入有了一个理性的认识了吧~

    分析原因:

         也是对用户提交数据没有进行校验

    解决办法:

    使用filter过滤器实现的代码如下:

    1、web.xml增加过滤器

    <filter>
    
        <filter-name>antiSqlInjection</filter-name>
    
        <filter-class>com.test.filter.AntiSqlInjectionfilter</filter-class>
    
    </filter>
    
    <filter-mapping>
    
        <filter-name>antiSqlInjection</filter-name>
    
        <url-pattern>/*</url-pattern>
    
    </filter-mapping>

    2、过滤器实现

    package com.test.filter;
    
    import javax.servlet.Filter;
    import java.io.IOException;
    import java.util.Enumeration;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class AntiSqlInjectionfilter implements Filter {
        public void destroy() {
            // TODO Auto-generated method stub
        }
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
        }
        public void doFilter(ServletRequest args0, ServletResponse args1,
                             FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) args0;
            HttpServletResponse res = (HttpServletResponse) args1;
            //获得所有请求参数名
            Enumeration params = req.getParameterNames();
            String sql = "";
            while (params.hasMoreElements()) {
                //得到参数名
                String name = params.nextElement().toString();
                //得到参数对应值
    
                String[] value = req.getParameterValues(name);
                for (int i = 0; i < value.length; i++) {
                    sql = sql + value[i];
                }
    
            }
            //有sql关键字,跳转到error.html
            if (sqlValidate(sql)) {
                throw new IOException("您发送请求中的参数中含有非法字符");
                //String ip = req.getRemoteAddr();
            } else {
                chain.doFilter(args0, args1);
            }
        }
    
        //效验
        protected static boolean sqlValidate(String str) {
            str = str.toLowerCase();//统一转为小写
            String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" +
                    "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +
                    "table|from|grant|use|group_concat|column_name|" +
                    "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" +
                    "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";//过滤掉的sql关键字,可以手动添加
            String[] badStrs = badStr.split("\\|");
            for (int i = 0; i < badStrs.length; i++) {
                if (str.indexOf(badStrs[i]) >= 0) {
                    return true;
                }
            }
            return false;
        }
    }

    上述例子中关键字or和 # 都满足过滤条件,都会被过滤出来

    2.3、OS命令注入攻击

    OS命令注入和SQL注入差不多,只不过SQL注入是针对数据库的,而OS命令注入是针对操作系统的。OS命令注入即能够在服务器上执行任意命令。

    如何防止OS命令注入:

    不要调用外部程序。举个例子,在UNIX系统上,有一个叫CGI的程序,可以执行sendmail命令来发送邮件。也许你的web应用程序也有发送邮件的功能,通过直接调用CGI程序发送邮件非常的简单,但是不要这样做,因为在执行sendmail命令的同时,也会混杂进其他OS命令,正确的做法是使用发送邮件的library。

    解决办法:

    过滤掉如下:  、; ,[ ,] ,| ,< ,> ,\ 之类的符号

     

    2.4、http首部注入攻击

    在响应首部字段内插入换行,添加影响首部或者主体的一种攻击Web应用有时会把外部接收到的数值,赋给响应首部的location和set-cookie

    首部注入攻击造成的影响:

    1)设置任务cookie信息

    2)重定向至任务url

    3)显示任意的主题( http响应截断攻击)

    2.4.1 举例

    常见的sql注入一般都是通过表单或请求参数进行注入,但这里给出的例子是通过HTTP协议头部进行注入。

    GET / HTTP/1.1

    Host: www.example.com

    Connection: keep-alive

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

    Upgrade-Insecure-Requests: 1

    User-Agent: Mozilla/5.0'(select*from(select(sleep(20)))a) #

    Accept-Encoding: gzip, deflate, sdch

    Accept-Language: en-US,en;q=0.8,fr;q=0.6

           HTTP协议的User-Agent头部为“Mozilla/5.0’(select*from(select(sleep(20)))a) #”。其中“select * from (select(sleep(20)))”是不正常的,可能是攻击者正在注入攻击。

          这里的攻击主要是让数据库什么也不干而睡眠20秒,从而浪费数据库处理线程。这是一个简单的注入,除此之外还能进行更多复杂的攻击。一般获取头部的信息用于数据分析,例如这里获取User-Agent就可以知道客户都是通过什么浏览器访问系统的。jsp中直接通过request.getHeader("User-Agent")就可以获取到该值,接着可能就直接保存到数据库了,Mozilla/5.0’(select*from(select(sleep(20)))a) #中的#号在数据库中作为注释符号,它产生的sql可能如下:

    INSERT INTO visits (useragent, datetime) VALUES ('Mozilla/5.0', (select*from(select(sleep(20)))a)) #', '2016-06-13 13:00:06')

    这时#号后面都被注释掉了,于是数据库睡眠了20秒。

    2.4.2解决办法:

    避免这种攻击的方法,就是过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF。

    2.5、Http响应截断攻击

    利用两个换行并排插入字符串后发送,利用连续的换行,可以做出首部和主体分隔所需的空行了。这样就能伪造主体,达到攻击的目的。

    如何避免 HTTP 响应截断

    要避免HTTP响应截断,需要注意以下几点:

    (1)对用户的输入进行合理验证,对特殊字符(如<、>、’、”等)等进行编码。

    (2)创建一份安全字符白名单,只接受完全由这些受认可的字符组成的输入出现在 HTTP 响应头文件中。

    (3)使用源代码静态分析工具,进行自动化的检测,可以有效的发现源代码中的 HTTP 响应截断问题。如

    在上述修复代码中,第38行使用 Refenence 类对环境变量值进行 decode,剔除特殊字符。

     

     

    2.6、获取Cookie攻击

    通过Java Script非常容易访问到当前网站的cookie。你可以打开任何网站,然后在浏览器地址栏中输 入:javascript:alert(doucment.cookie),立刻就可以看到当前站点的cookie(如果有的话)。攻击者可以利用这个特 性来取得你的关键信息。例如,和XSS攻击相配合,攻击者在你的浏览器上执行特定的Java Script脚本,取得你的cookie。假设这个网站仅依赖cookie来验证用户身份,那么攻击者就可以假冒你的身份来做一些事情。
          现在多数浏览器都支持在cookie上打上HttpOnly的标记,凡有这个标志的cookie就无法通过Java Script来取得,如果能在关键cookie上打上这个标记,就会大大增强cookie的安全性

    2.7、目录遍历攻击

    对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击也称为Path Traversal攻击

    文件交互是一种简单的过程,但是由于文件名可以任意更改而服务器支持“~/”,“../”等特殊符号的目录回溯,从而使攻击者越权访问或者覆盖敏感数据,如网站的配置文件、系统的核心文件,这样的缺陷被命名为路径遍历漏洞

    展开全文
  • API接口安全性设计思路

    千次阅读 2015-03-19 08:53:45
    API接口安全性设计思路
  • ISO 27001解读(一)管理思路

    千次阅读 2020-04-05 22:17:49
    ISO 27001是信息安全管理系统(ISMS)的国际标准。它提供了用于风险评估,安全性设计实施以及安全性管理的模型。ISO 27001标准指定了实施管理指南,以帮助确保您的数字书面信息的安全。 ISO 27001是信息安全...
  • 微服务构建思路方法

    千次阅读 多人点赞 2018-12-15 18:13:13
    微服务规划、微服务构建、微服务协同、微服务测试、微服务治理、微服务下线等是企业采用微服务必须面对的微服务生命周期管理问题。我们讨论过微服务治理的问题,由于一些原因未能整理微服务拆分、微服务设计、微服务...
  • JIRA带来的管理思路

    千次阅读 2014-02-21 14:52:49
    刚刚开始用Jira的时候,只是觉得这是一个方便的bug管理系统,可以将在...因起初只是使用者,因而并未有站在一个管理者的角度上来看JIRA在项目管理中的作用意义。因此今日再看时,已发现由于出发角度的错误而出现的
  • 信息安全资产梳理新思路

    千次阅读 2020-05-25 20:45:56
    信息安全的建设实质是风险管理,风险管理的三要素分别是资产、威胁脆弱性,这三项的基础是资产管理,如何做好资产管理是IT管理人员运维人员面临的一大难题,有很多的产品可以做资产管理,但是他们的功能是比较...
  • 操作系统的安全管理

    千次阅读 2017-06-03 15:15:35
    OS的安全管理
  • 7、前后端分离中的权限管理思路

    万次阅读 2019-05-26 15:24:24
    在传统的前后端不分的开发中,权限管理主要通过过滤器或者拦截器来进行(权限管理框架本身也...但是在前后端分离中,页面的跳转通通交给前端去做,后端只提供数据,这种时候,权限管理不能再按照之前的思路来。 ...
  • 信息内容安全包括两部分:合法信息的保护非法信息的监管; 信息隐藏信息加密: 加密是把信息内容保护加密保护起来,不被旁人看到;而隐藏是将隐匿信息藏信息中,同时保证信息的可用性,保护的是版权; 内容保护...
  • 1通过原则策略的安全治理 Security GovernanceThrough Principles and Policies 1.1 理解应用机密性、完整性、可用性的概念 1.2 应用安全治理原则 1.3 开发并文档化安全、策略、标准、指南程序 ...
  • 后台的权限管理设计思路

    千次阅读 2018-06-22 13:53:15
    [sql] view plain copy&...在这个项目设计之前,老板要求使用权限设计,我比较了一些设计方式,感觉都不错,于是综合了一下,自己写一种权限管理&lt;/span&gt; 在权限这一块出于安全性考虑...
  • 权限管理 (一) 设计思路分析实现授权、认证

    千次阅读 热门讨论 2013-11-24 13:50:22
    权限的认识 ...说起对权限的理解可以说是从...上面是从了解权限到一个权限模块的解决思路和设计步骤,在大小不同的系统中可以适当的扩展和删减,这只是一种思路还有很多关于权限的解决方法比如 RBAC等。
  • 导读: 安全建设整改工作是开展等级保护工作的核心...● 探索信息安全工作的整体思路 ● 确定信息系统保护的基线要求 ● 了解信息系统的问题差距 ● 明确信息系统安全建设的目标 ● 提升信息系统的安全保...
  • 但是在前后端分离中,页面的跳转统统交给前端去做,后端只提供数据,这种时候,权限管理不能再按照之前的思路来。 首先要明确一点,前端是展示给用户看的,所有的菜单显示或者隐藏目的不是为了实现权限管理,而是...
  • 这是作者网络安全自学教程系列,主要是关于安全工具实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了Easy_unserialize解题思路,详细分享文件上传漏洞、冰蝎蚁剑用法、反序列化phar...
  • 小编在前几年搞了一段时间的物联网安全研究,前后大概弄了大半年左右。后来又做个两个相关的项目,也是物联网安全这块的。 前段时间,有一家搞物联网的公司拉我去面试,小编谈了谈自己对物联网领域的理解。 怎么说呢...
  • 1.3 信息安全管理基础 欢迎加入最棒的信息安全工程师社群,分享信息安全工程师备考干货资料。 备考交流QQ群:39460595 https://www.moondream.cn/?p=521 一.大纲要求 1.3.1 信息安全管理制度与政策 * 熟悉...
  • 安全 | 几种wifi密码破解的思路

    万次阅读 多人点赞 2017-02-16 12:36:58
    从一个攻击者的视角,多种方案,讲述破解一台路由器进而控制对方网络的过程,以此提醒广大用户,提高安全意识,做好安全措施。
  • 网络安全体系方法

    千次阅读 2020-06-08 14:56:10
    安全牛整合多位资深安全顾问的一线咨询经验,首次公开发布《网络安全体系方法论》,旨在给企业或机构提供一个最佳实践的参考,以帮助企业真正提升对网络安全工作的认识,并在安全建设运营中不断成长。 本架构方法...
  • 数据安全治理方法导论

    千次阅读 2020-11-25 22:30:38
    1.4 数据安全建设需要有系统化思维建设框架 第二章 数据安全治理基本理念 2.1 Gartner 数据安全治理理念 2.2 数据安全治理系统理论设计 第三章 数据安全治理-组织建设 第四章 数据安全治理-规范制定 4.1 ...
  • ThreadLocal是解决线程安全问题一个很好的思路,ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,由于Key值不可重复,每一个“线程对象”对应线程的...
  • 提供一套基于SpringBoot-shiro-vue的权限管理思路.

    万次阅读 热门讨论 2018-02-09 14:22:13
    前后端都加以控制,做到按钮/接口级别的权限DEMO测试地址admin/123456 管理员身份登录,可以新增用户,角色.角色可以分配权限控制菜单是否显示,新增/删除按钮是否显示设计思路核心每个登录用户拥有各自的N条权限,比如 ...
  • 如今网络安全问题已不可忽视,保护好自己的网站就显得非常有必要!此处以emlog博客为例子!!!之前有通过修改admin文件夹名字的方式修改后台路径,但是会涉及到修改很多代码,并且还有可能的导致一些主题模版的功能...
  • 2020哔哩哔哩bilibili安全挑战赛前5题思路

    千次阅读 多人点赞 2020-10-24 15:49:55
    此外,这只是思路,一定要自己尝试~~~ 只做前5题是铁定没奖的,直接“抄答案”不会让你得到任何的好处,而且还会磨灭你自己解题闯关的兴趣,所以一定要自己尝试! 第一题: “页面的背后是什么” 指网页源代码 ...
  • 信息搜集方法总结与思路整合

    万次阅读 多人点赞 2019-04-22 12:55:11
    其基本思路是尽可能避开互联网上有可能影响数据传输速度稳定性的瓶颈环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据...
  • 参考网上文章的思路,重新创建一个管理员。然后用新建的管理员登录,设置之前普通用户的信息,提升权限。 步骤: 1、关机,按电脑开机键,时同时按下:command+s 注意:我开始操作的方法是按一下电脑开机键立刻...
  • 内网横向移动思路和技巧

    万次阅读 2020-11-30 08:00:00
    3、WMI WMI即Windows管理规范 是用户管理本地远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。 远程创建进程: wmic /node:10.1.1.1 /user:administrator /password:abc123! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 151,193
精华内容 60,477
关键字:

安全管理思路和方法