zoukankan      html  css  js  c++  java
  • 软件质量属性——安全性

    安全性的定义:

    指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力;

    安全性面对的攻击方式:

    未经授权试图访问数据或服务。

    未经授权试图修改数据。

    试图使用系统拒绝向合法用户提供的服务。

    安全性的特点

    通过软件执行才可见的质量因素;

    安全性的需求:

    对有保密性要求的数据实施安全控制;

    提供系统运行日志监控信息,供管理员了解系统运行状态;

    安全性的场景样例:

    场景:有黑客对淘宝网进行sql注入,试图非法登陆网站后台,获取用户信息

    刺激源:黑客(非授权用户)

    刺激:试图采用非法手段来入侵淘宝后台以获取信息

    制品:淘宝中的数据

    环境:在线环境

    响应:对访问用户进行验证,阻拦不正当的用户访问数据

    响应度量:查到非法入侵时在1秒以内做出反应,进行阻拦处理,保护数据安全性

    非法登陆拦截方式:

    1.整个流程示意图:

    2.具体实现

    非法登录拦截,主要用到的是.net mvc里的过滤器。我们每次在执行一个方法时候,实际上程序会预先对我们设置的一些过滤条件进行验证和判断,而不同的过滤器作用的优先级是不同的,在实现这个拦截功能的时候,用到的主要是全局过滤器

    具体的处理思路是这样的:我们现在App_Start文件夹下的FilterConfig.cs文件中注册一个全局过滤器,这个全局过滤器的作用是——进行登录授权,也就是检查你这个用户是不是已经登录的合法用户,如果不是,那么你做的任何其他操作,系统都不会响应,而是一直把你堵在登录界面。

    using Console.App_Start;
    
    using System.Web;
    
    using System.Web.Mvc;
    
    namespace Console
    
    {
    
        public class FilterConfig
    
        {
    
            /// <summary>
    
            /// 注册全局过滤器
    
            /// </summary>
    
            /// <param name="filters"></param>
    
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    
            {
    
                //filters.Add(new HandleErrorAttribute());
    
                //登录授权
                //在这里注册了一个名为 AuthFilter的过滤器,每次后台执行某个动作之前,都必须先要通过这个过滤器的审核,审核通过执行某操作,审核不通过有执行某操作。
                filters.Add(new AuthFilter());
    
            }
    
        }
    
    }

    授权条件核心代码:AuthFilter.cs

    using Console.Util;
    
    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Web;
    
    using System.Web.Mvc;
    
     
    
    namespace Console.App_Start
    
    {
    
        public class AuthFilter:ActionFilterAttribute
    
        {
    
            public override void OnActionExecuting(ActionExecutingContext filterContext)
    
            {
    
                //如果用户未登录,且action未明确标识可跳过登录授权,则跳转到登录页面
    
                if (!CacheUtil.IsLogin&&!filterContext.ActionDescriptor.IsDefined(typeof(AuthEscape),false))
    
                {
    
                    const string loginUrl = "~/Main/Login";
    
                    filterContext.Result = new RedirectResult(loginUrl);
    
                }
    
                base.OnActionExecuting(filterContext);
    
            }
    
        }
    
    }
    
     AuthEscape,这是一个定义过滤器特性的类,在这个我们只把它作为一个标志,作为一个可以免除登录授权的标志。我们在执行任何一个方法之前都会经过全局过滤的过滤,只有已经登录的用户才能执行action方法。但是,因为我们的登录信息是在登录之后才被记录的,那我们的登录操作,登录校验的操作不就也被挡在外面了吗,这样一来,岂不是永远无法登录了吗。所以呀,为了解决这个问题,我们就需要给这两个方法每人发一块免检通行证,也就是在他们头上写一个[AuthEscape],只要有了这个标志,那么上面的那句代码就会返回一个true,如果没有,那么就会返回false。假如既没有登录,又没有免检通行证,那么就会被拦在登录界面上。
    AuthEscape.cs的代码如下:
    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Web;
    
    using System.Web.Mvc;
    
    namespace Console.App_Start
    
    {
    
        /// <summary>
    
        /// 用于标记无需登录授权验证的Action,无任何实现,在那个action上面标注这个,就可以逃过全局过滤器的过滤
    
        /// </summary>
    
        public class AuthEscape:ActionFilterAttribute
    
        {
    
        }
    
    }
     

     

     

  • 相关阅读:
    LOJ6435 「PKUSC2018」星际穿越
    LOJ6433 「PKUSC2018」最大前缀和
    LOJ2541 「PKUWC2018」猎人杀
    LOJ2545 「JXOI2018」守卫
    LOJ2290 「THUWC 2017」随机二分图
    CF1007B Pave the Parallelepiped
    【学习笔记】卡特兰数
    Linux系统命令“su
    免密
    Window操作系统下的SSL证书管理
  • 原文地址:https://www.cnblogs.com/zql98/p/12400766.html
Copyright © 2011-2022 走看看