业务逻辑 订阅
业务逻辑是在智能网中,对利用积木式组件(SIB)和基本呼叫处理(BCP)模块的组合来完成每项业务特征的过程描述。 展开全文
业务逻辑是在智能网中,对利用积木式组件(SIB)和基本呼叫处理(BCP)模块的组合来完成每项业务特征的过程描述。
信息
外文名
service logic;SL
应用学科
通信科技
中文名
业务逻辑
业务逻辑定义
智能网是用于生成和提供电信新业务的网路结构体系。主要由业务交换点、业务控制点、业务管理点和业务创建点组成。主要目标是实现新业务的快速引入。 业务逻辑是在智能网中,对利用积木式组件(SIB)和基本呼叫处理(BCP)模块的组合来完成每项业务特征的过程描述。智能网业务逻辑在不同的平面中有不同的表示,在总功能平面中,有一组总业务逻辑(GSL),它说明了完成各个业务独立模块(SIB)链接在一起的次序;在分布功能平面中,分布业务逻辑(DSL)是实现SIB功能时各个功能实体的动作和各个功能实体间的信息流;在物理平面中,包含业务控制功能(SCF)的物理实体执行业务逻辑程序。通信有限状态机模型是由表示进程的有限状态机和表示进程之间通道的先进先出队列(FIFO)组成。 [1] 
收起全文
精华内容
下载资源
问答
  • 业务逻辑
    千次阅读
    2022-06-21 13:26:20

    在一些关键的业务场景里,我们最应该关注的安全问题是什么呢?

    想到这,发现挺有意思的,于是我重新去梳理了一下业务逻辑方面的内容,做了一张关于业务逻辑安全的思维导图,在整理的过程中,自己的思路越加清晰。分享给屏幕前的你,希望你亦有所获。如有遗漏,欢迎补充。

     

    01、防前端绕过

    前端校验增加用户体验,后端校验才能保障接口安全性。

    漏洞案例:支付计价的逻辑写在前端,后端没有做数据校验,从而导致0元支付逻辑漏洞。

    02、防数据重放

    增加防重放机制,防止数据重复提交。

    漏洞案例:抽奖接口未做任何限制,可进行数据重发,从而获取大量积分或现金券。

    03、防越权绕过

    增加用户权限验证,防止用户越权。

    漏洞案例:遍历用户id导致用户敏感信息泄露。

    04、防流程绕过

    业务逻辑拆分需考虑风险,防止用户绕过某些节点,执行后面的流程。

    漏洞案例:积分兑换的场景,将积分扣减和兑换拆分为两个接口,攻击者可直接执行兑换,不执行积分扣减。

    05、防数据篡改

    增加签名认证,防止数据被篡改。

    漏洞案例:用户的游戏成绩直接篡改可用于游戏作弊。

    06、防高并发攻击

    防范业务端的条件竞争,一般的方法是设置锁。

    漏洞案例:利用高并发请求抢占时间,从而绕过积分限制实现多次抽奖。

    更多相关内容
  • 细说业务逻辑

    千次阅读 2020-06-01 16:49:17
    1、我把业务逻辑丢了!——找回丢失的业务逻辑 2、细说业务逻辑 2.1、业务逻辑到底是什么 2.2、业务逻辑的组成结构 2.2.1、领域实体(Domain Entity) 2.2.2、业务规则(Business Rules) 2.2.3、完整性...

    转载自:https://www.cnblogs.com/kaisadadi/p/9265127.html

    前言

    内容提要

    1、我把业务逻辑丢了!——找回丢失的业务逻辑

    2、细说业务逻辑

      2.1、业务逻辑到底是什么

      2.2、业务逻辑的组成结构

       2.2.1、领域实体(Domain Entity)

       2.2.2、业务规则(Business Rules)

       2.2.3、完整性约束(Validation)

       2.2.4、业务流程及工作流(Business Processes and Workflows)

      2.3、业务逻辑层职责相关争议

       2.3.1、争议一:数据的格式化

       2.3.2、争议二:数据合法性及完整性验证

       2.3.3、争议三:CRUD

       2.3.4、争议四:存储过程

    ===================后篇=====================

    3、业务逻辑的架构模式及实现

      3.1、Transcaton Script

       3.1.1、概述

       3.1.2、分析

      3.2、Table Module

       3.2.1、概述

       3.2.2、分析

      3.3、Active Record

       3.3.1、概述

       3.3.2、分析

      3.4、Domain Model

       3.4.1、概述

       3.4.2、分析

      3.5、各种架构模式的比较及选择

    4、结束语

    参考文献

    1、我把业务逻辑丢了!——找回丢失的业务逻辑

    相信朋友们基本都是软件开发人员。不论身处什么职位,我们的工作都有一个共同的目标——制作软件产品。而所谓的软件产品,一定是在某个领域内去实现某些业务 。如此看来,“业务逻辑”本应和“软件产品”是紧紧绑在一起的,没有业务逻辑,何来软件产品?

    但是,我发现一个奇怪的现象,一说业务逻辑,很多人就无法形成清晰地印象。例如,经典的三层架构:表示层、业务逻辑层和数据访问层,一提到表示层或数据访问层,大家脑子里马上能产生出清晰的概念,但一提到业务逻辑层,就有点模糊了,或者完全不知道其是什么,或者有个模糊的轮廓,但对其具体的职责、结构不是很清楚。真是奇了怪了!我们天天和业务逻辑打交道,搞不清业务逻辑是什么。

    对于这个奇怪的现象,我思前想后,结合自身的教训(我也曾很长时间搞不清业务逻辑),终于弄清楚了其原因——这和我们接触这个概念的途径和认知结构有莫大关系。

    不知道有多少人和我一样,首次接触“业务逻辑”这个概念是从分层架构中的“业务逻辑层”概念开始的,我相信不在少数。事情坏就坏在这里!为了让朋友们直观看清“业务逻辑”的概念是怎么被我们丢掉的,请大家看一个图,这个图展示了很多人对“业务逻辑”的认知过程。

    图 1-1、狭义的认知分解过程

    如图1-1所示,我们先接触了分层架构,然后对每个层产生了初步的认识。其中,由于表示层和数据访问层的代码职责清晰明确,基本能正确认识。但是,由于我们接触的分层架构的Demo大多业务极其简单,又基本是CRUD操作集中型的业务。所以,我们脑子中就产生了疑问:这个所谓的业务逻辑层是干什么的?怎么就简单封装了一下数据访问层的操作?这有存在的必要吗?由于有了这种“先入为主”的误导,使得很多朋友脑中将“业务逻辑”和“业务逻辑层”两个概念混淆了,始终想不明白这东西到底是什么,做什么用的。再加上很多朋友所看的、所做的系统都是CRUD操作集中型的,就形成了“业务逻辑貌似就是对数据访问操作的简单封装”这一片面概念。

    到底这一概念有没有错呢?其实没错,因为在简单的、CRUD操作集中型软件中,业务逻辑基本就是对数据访问简单的封装。但是,无错不代表全面,这是一种狭义的业务逻辑理解,而且是狭义中的狭义。为什么这么说呢?因为我们不但是在“业务逻辑层”这么一个狭义范围内去理解业务逻辑,而且还是CRUD集中型操作这种“非常瘦”的业务逻辑层范围内去理解,所以,可谓是在狭义的基础上的狭义。

    当我们把这么一个“狭义中的狭义业务逻辑”与“业务逻辑”等同起来时,误会、迷茫、困惑、不屑就出现了。这就如同,给你一只温顺的哈巴狗,还是病怏怏的、无精打采的小哈巴狗,而你把这只“病怏怏的小哈巴狗”与“狗”的概念等同起来了。那么你一定就会为有人养狗看家和警察养狗当警犬抓坏人而困惑:这东西这么弱小,我一脚就踩死了,怎么弄用来看家和抓坏人呢?进而可能会产生“狗狗无用论”,“狗狗废品”等观念。当然,在现实中,很少有人只见过小哈巴狗而没见过狼狗等其它狗类,所以,故事中的误会对 “狗”一般是不存在的。但在现实中,确实有很多人只见过业务逻辑中的“小哈巴狗”,却没有见过业务逻辑中的“狼狗”、“藏獒”,所以,这种误会在对“业务逻辑”的理解上广泛存在。

    那么,广义的情况究竟是怎么样的?请看下图。

    图 1-2、广义的认知分解过程

    (注意!凡是不特别说明,下文中所有“数据”一词都指需要持久化的数据,而不包括内存中的临时数据。请各位留心。)

    如图1-2所示,广义的认知分解应该是这样的:软件产品都是在某个领域内实现某些特定业务,所以,软件产品天生应该分解为界面交互部分和业务逻辑部分,其中业务逻辑部分是软件产品的核心,它客观存在于软件产品内部,但是无法对使用者产生直观刺激,因此业务逻辑不能与使用者直接交互。而界面交互部分是业务逻辑与使用者进行交流的接口,使用者通过界面交互部分,与业务进行交流,从而使得软件产品发挥其作用。

    而在具体实现系统时,界面交互部分演化成表示层,业务逻辑部分演化成业务逻辑层。所以,可以认为,数据访问层不是软件产品自然演化的直接产物,之所以出现数据访问层,是因为某些产品的业务属于“数据操作集中型”业务,为了实现隔离、复用等目的,架构师从业务逻辑中分离出了频繁使用的数据访问业务,形成了单独的数据访问层。从广义来说,可以认为数据访问隶属于业务逻辑,因为,数据访问操作实际上也是业务逻辑的一部分。

    总结一下几个要点:(这几个要中的业务逻辑均指广义业务逻辑)

    1)软件产品自然的可分为界面交互部分和业务逻辑部分。

    2)从空间结构上看,业务逻辑和数据访问不是并列关系,而是隶属关系——数据访问隶属于业务逻辑。虽然在具体系统实现层面,数据访问层和业务逻辑层是并列存在,但从概念本质层面上分析,两者是隶属关系。

    3)从时间结构上看,应该是先有业务逻辑的概念,才有数据访问的概念。业务逻辑衍生自软件本身,数据访问衍生自业务逻辑。

    4)因为业务逻辑是软件产品自然的一部分,所以拥有业务逻辑是软件产品的必要条件(读者可以试着举出一个不包含业务逻辑的软件)。但是一个软件可以没有数据访问,如“计算器”、“不带存档的小游戏”等。

    利用以上论述要点和认知分解,朋友们可以试试在脑中重新构筑狭义和广义“业务逻辑”的概念。看能不能把我们丢掉的业务逻辑概念找回来。关于业务逻辑更多的细节,将在下文中讨论。

    2、细说业务逻辑

    2.1、业务逻辑到底是什么

    在第一大节里说了那么多,相信各位基本已经形成“业务逻辑”的概念了。如果我在这里再啰嗦什么,我不嫌累各位也要嫌烦了。所以,这里我仅给出两个定义。

    广义上的义务逻辑——软件本身固有的一种品性,自然存在于软件产品内部,是软件具有的在某个业务领域内的逻辑,是软件的核心和灵魂。软件产品除界面和交互外的一切都可看作是广义业务逻辑。

    狭义上的业务逻辑——等同于分层架构中“业务逻辑层”的职责,是软件中处理与业务相关任务的部分,一般狭义上的业务逻辑不包含数据持久化,而只关注领域内的相关业务。

    对于以上两种定义,希望朋友们不要割裂开来看,而 要辩证统一的去看,这样,才能构建一个完整而辩证统一的“业务逻辑”概念。在下文中,将不再明确区分狭义和广义,“业务逻辑”一词将代表两者的辩证统一体。

    2.2、业务逻辑的组成结构

    业务逻辑作为一个高层次概念,其内在结构也是非常丰富的,下面我们深入其里,去探寻一下业务逻辑都是由哪些更底层的部分构成的。

    2.2.1、领域实体(Domain Entity)

    通俗的说,领域实体就是这个领域内有哪些东西。例如,银行业领域内有账户、支票、前台营业员等实体;B2C电子商务领域有商品、订单、交易等实体;魔兽世界游戏的领域内有角色、种族、道具、魔法等实体;高等代数领域有矩阵、行列式等实体。

    领域实体是某个领域内各种对象的抽象,可以用名词表示(可以是具体名词或抽象名词,甚至动名词,只要其具有名词性),构成了整个业务逻辑的骨骼和静态模型。一般每个领域实体有自己的一些属性和行为。 顺便说一句,领域实体的存在时OOA&D的基础。

    在具体的软件系统中,领域实体往往会根据架构的不同有不同的映射存在形式。

    其中一种叫做Business Object(BO),即业务对象,某些文献称其为“充血实体类”,这种对象完整抽象了领域内的某个实体,封装了此实体相关属性和行为。在面向对象的设计和架构中,这种实体类很常见。

    另一种叫做Data Transfer Object(DTO),某些文献称其为“贫血实体类”,其特点是仅有属性,不存在行为。这种实体类主要负责整体性传递数据。另外,与BO不同的是,DTO可以不抽象领域实体的全部属性,而只根据需要抽象一部分。例如,某个“User”实体存在很多属性,但如果某个方法仅需要其联系方式,可以设计一个DTO,仅有id,email,address,phone等就够了。在面向过程的设计和架构中,这种实体设计比较常见。

    2.2.2、业务规则(Business Rules)

    业务规则就是某个领域内运作的规则,构成了整个业务逻辑的灵魂和动态模型。业务规则作用于领域实体,领域实体遵从业务规则进行运作。

    如:在银行领域内,“转账时从A账户扣除相应款项,在B账户添加相应款项,并从A账户扣除相应手续费,并通过某些途径通知A和B账户的户主”就是一条规则。需要注意的是,业务规则比较抽象,并不是需求,需求需要具体且无二义性,而业务规则只是抽象的一种描述,例如,通知户主的途径是什么?电子邮件?电话?短信?并没有具体描述,但在规则中有“通知”这一项,因此不能将业务规则等同于需求。

    2.2.3、完整性约束(Validation)

    领域实体和业务规则构建了业务逻辑的主体,但在这主体之上,还存在着一个限制,这就是完整性约束。

    完整性约束是对业务领域中的数据、规则的强制性规定与约束。这种约束是系统正常运转的保证。

    如“账户密码不能为空”,“身份证号必须符合具体格式规定”,“转账流程必须具有原子性,A账户扣钱、B账户存钱、A账户扣除手续费、通知户主四项操作必须要么都做,要么都不做”,都是完整性约束。

    2.2.4、业务流程及工作流(Business Processes and Workflows)

    有了上述三项,业务逻辑还不能正常工作,因为还没有“启动器”和“过程托管器”。设想我们有了各种实体类,它们有各自的属性和行为,也有定义好的业务规则和完整性约束。现在实体类仅仅具有实现业务规则的能力,但它们如何启动并交互协调完成业务规则呢?因此我们需要有东西去触发和协调实体。

    业务流程或工作流是启动及托管协调领域实体完成既定规则的过程。例如,“在线订购”是一个业务流程,它包括“用户登录-选择商品-结算-下订单-付款-确认收货”这一系列流程。各个实体如会员、订单、商品等已经包含了完成在线订购必要的行为,但仍需一个流程,才能真正完成业务。

    具体到程序中,业务流程也许通过一个方法来实现,这个方法负责启动并协调各个实体类,完成一个流程。

    2.3、业务逻辑层职责及相关争议

    2.3.1、数据的格式化

    关于数据的格式化应该放在业务层进行还是表示层进行一直存在争议。我个人的意见是这样的:

    业务层送给表示层的数据应该具备以下要求。1)返回的数据应该完成了所有必要的业务处理和业务计算。例如,若返回订单信息让表示层展示,会有个必要的数据——订单总额。这个数据需要首先用各个订单项的单价乘以数量,然后加和。那么,这个数据应该在业务层完成计算直接返回,总之不应让表示层进行任何业务处理和计算操作。2)一次性返回所有需要的数据,避免表示层再一个Action里调用多次业务。 打个比方,例如订单中有个“客户姓名”,这个数据不保存在订单表中,而是通过外键关联的,那么,业务层应该将“客户姓名”一并取出返回给表示层。总之,避免表示层在一个Action里多次调用业务层。3)不携带任何格式信息,仅仅是结构良好的纯净数据,如DTO形式。 因为,数据如何展示,是表示层的职责,如何在业务层中返回了过多格式信息,就会造成表示层的修改困难。例如,我曾听说过所里承接的一个实际项目,开始是使用B/S,当时他们的业务层返回的数据全都附带了html代码。后来,客户嫌B/S响应不够迅速(可能是客户公司的网络条件不好),要求改成C/S,当时全傻眼了,貌似几乎修改了整个业务层。那个项目相当庞大,7个子系统,投入200人开发了1年多,想想修改的难度吧。

    2.3.2、数据合法性及完整性验证

    一般做系统,都避免不了数据验证。上文曾经提到,完整性约束是业务逻辑的一部分。如此看来,数据验证一般应该放在业务层。但是,实际情况并不尽然。个人认为数据验证的方式,目前没有统一标准,可以根据需要放在表示层或业务层。但是,我个人不提倡在“表示层的服务端”放置过多完整性验证。因为,表示层的职责应该仅仅是接收数据并传递给业务层,不应对数据是否合法负责。过多的数据验证,不但令表示层代码臃肿,而且使得表示层职责变得不明确。

    可以在“表示层的服务端”放置一些简单的验证,如空值验证,两次输入密码是否一致等,但业务关系紧密的验证,最好放在业务层。甚至有些验证只能在业务层验证,如“当前用户名不能与已有用户名重复”,这种验证需要访问持久化数据,需要由业务层完成。

    这里之所以强调“表示层的服务端”,是因为一般在B/S系统中,都会在JavaScript里加入一些基本的数据验证,如空值检查,格式正则匹配等。这主要是为了减轻服务器负担,将大多数显然包含不合法数据的请求拒绝掉,而不发给服务端验证。当然,因为可能会出现JS被屏蔽或黑客恶意攻击行为,所以,所有验证不论JS中是否验证过,服务端(可能是表示层的服务端部分或业务层)一定要再进行验证。

    2.3.3、CRUD

    CRUD,即常说的增删改查操作。关于CRUD是否是业务层的职责,一直也是争议不断。因为目前并没有权威的定义,所以这里我斗胆说一下我对这个问题的看法。还请大家批判性阅读。

    一说到“增删改查”,大家一定会觉得这理所当然是数据访问层的职责。我认为这个理解是对的,但是只对了一半!之所以这么说,是因为“增删改查”有两个层次含义。

    第一个层次,是数据访问层次上的。在这个层次上,“增删改查”只是单纯的数据库操作,“增删改查”可以理解为“插入一条记录,删除一条记录,更新一条记录的信息,获取一条或多条记录”四个操作,其意义和着眼点完全是数据访问层面上的,不带有任何业务成分和业务知觉。这个层面上的CRUD应该属于数据访问层的职责。

    第二个层次,是业务逻辑层次上的。在这个层次上,“增删改查”是业务领域内实体的变化以及一系列相关反应,“增删改查”可以理解为“领域内新增一个业务实体,领域内去掉一个业务实体,领域内一个业务实体更新了信息,得到领域内一个或多个业务实体的信息”。

    两者最大的不同,是业务层面上的增删改查往往不是单纯的增加减少,还包括实体变化后相关的业务流程。下面举个例子:

    “添加一个新的订单”——这是一条典型的“增”操作。在数据访问层面上,它的意义是“在表示订单的数据表里增加一条记录”;而在业务逻辑层面上,它的意义除了“领域内多了一个订单实体”外,还可能包括“根据业务规则判断是否是重复下单,根据金额对下订单客户的等级做相应提升、发送Email和短信通知客户等”。可以看到,业务层面上的“增”可能不仅是简单封装一个简单的插入记录,可能还要去做其他数据访问——提升用户等级,以及做一些非CRUD的业务操作 ——发送短信通知。

    在许多稍微复杂的系统中,业务往往不仅仅是封装了一条数据访问操作,而是还有很多如计算等业务处理,一个业务操作期间可能要多次使用数据访问操作。退一步说,即使某个业务仅仅封装了一条数据访问操作,其意义和层面也是不同的,在数据访问层面,仅仅是多了一条记录,而业务逻辑层面,是领域内多了一个业务实体。也许其本质上都是往数据库插入一条记录,但人类的抽象思维可以将之在不同层面上区分,这也是人类思维层面的一种抽象能力的表现。例如,我们知道太阳升起不过是地球自转使得从背阴面转到了向阳面,但当人们看日出时,很少有人会说“看!我们从背阴面转到向阳面了!”,我们会说“看!日出!”,这就是同一事物的不同层次表现。

    2.3.4、存储过程

    也许是性能上的诱惑,许多人喜欢在数据库系统中写很复杂的存储过程。这样,许多业务操作就被写到存储过程中去了。我个人建议,除非对性能要求极高,否则最好还是不要用存储过程实现业务。例如,在一般的系统中,某个业务操作可能需要1秒,而是用了存储过程只用0.1秒,看上去存储过程将效率提高了10倍。但对大多数用户来说,1秒和0.1秒的差别并不大,但是这样做的话,业务会变得十分不容易维护。所以,我个人觉得,除非十分必要,还是不要用存储过程实现业务。

    3、业务逻辑的架构模式及实现

    Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,总结了四种企业应用中业务逻辑的组织方式 :Transcation Script,Domain Model,Table Module及Service Layer,另外,本书的第十章“Data Source Architecture Patterns”中包含一种模式——Active Record。结合软件体系结构的近期发展及个人的理解,我更倾向将Active Record归入业务逻辑的组织模式,而Service Layer应该不算做业务逻辑特有的模式,所以,在本文中,将介绍四种模式:Transcation Script,Table Module,Active Record及Domain Model。

    3.1、Transction Script

    3.1.1、概述

    Transction Script(以下简称TS)是一种面向过程的业务逻辑组织方式。这里首先要强调一点,这里的Transction一词与数据库系统中表示“事务”的 Transction没有任何联系。TS是将领域中的业务分解为一个个业务过程,每个过程实现一项业务功能,具体到程序中,一个业务过程往往映射到一个方法。TS是完全面向过程的业务组织模式,适合应用于业务逻辑较简单的场合。

    应该说,我们见到的绝大多数系统都是以TS组织业务的。例如PetShop及Oxite等经典示例。有时为了方便维护,开发者会将同一领域实体相关的业务方法集中到一个类中,这里虽然用到了领域实体和类的概念,但和面向对象没有任何关系,完全是面向过程的。

    当使用TS时,可以不需要数据访问层,而是将数据操作执行代码(如执行SQL或存储过程的代码)直接嵌入在业务方法中,有时为了复用性和维护性可以编写一个helper类封装数据库的操作。当然这并不是说TS不能配合数据访问层使用,但由于应用TS的场合一般业务非常简单,如果配合Repository或 ORM使用,业务逻辑层往往就会变得非常“瘦”,看起来仅仅是对数据访问层的封装。一般在需要支持多数据库的场合,要配合Repository和 Abstract Factory使用。

    TS的示意图如下所示:

    图3-1、 Transcation Script架构示意

    可以看到,在TS中,业务层并没有面向对象的东西。也许会用到类,但类只是组织业务方法的模块,每个模块中有一个个业务方法,每个业务方法完成一个业务流程,完全按面向过程结构组织。

    3.1.2、分析

    • 什么时候可以用TS?

    应该说,如果具备以下条件之一 ,你可以考虑TS:

    1)系统业务十分简单直观,并且频繁变动的可能性不大

    2)工期很紧,需要尽量压缩设计的时间,尽快投入编码

    3)不能熟练掌握和使用OO进行系统的设计与开发

    4)厌恶OO,就是喜欢面向过程

    • TS的优点?

    1)设计阶段投入较小,启动耗费低。因为TS较容易掌握,使用起点低,所以使用TS的初期投入较少

    2)在业务比较简单直观的情况下,TS结构的代码直观易懂,具有良好的可维护性

    • TS的缺点?

    1)容易造成代码冗余。因为各个业务自行组织流程,所以减少了复用的机会,可能产生重复性代码

    2)因为TS天生不适合业务复杂的系统,当系统业务较复杂时,可能会令业务层代码繁杂不堪

    3.2、Table Module

    3.2.1、概述

    Table Module(以下简称TM)同样是一种面向过程的业务逻辑组织方式,与TS不同的是,TM更贴近关系型数据库结构。在TS中,一般使用DTO等进行数据表示和传递,其着眼点一般在单个对象。而TM一般根据数据表组织业务模块,每个模块对应一个表,其中包含了这个表的相应处理。并且在业务层内,使用库-表结构的对象进行数据操作,做到最大限度与数据表的对应。业务组织一般按照面向过程组织。

    一般当业务相对简单且业务基本集中在CRUD操作时,可以考虑TM。使用TM意味着使用数据驱动设计。通常自己实现一套库-表结构操作对象的库是难度比较大的,所以一般选用TM时,所使用的平台应该包括这么一套库。如.NET平台上的ADO.net就内置了丰富的库-表操作,DataSet,DataTable,DataAdapter等在TM架构的实现中可以起到非常方便的作用。

    使用TM后,一般不需要再配合Reponsitory或ORM,因为此时的业务层也是面向过程和面向关系型结构的,无须映射。

    TM的示意图如下:

    图3-2、Table Module架构示意  

     

    在使用TM后,业务代码中往往有各种对象对应数据库中的库、表、记录、字段等元素,并提供类似关系数据库的操作。

    3.2.2、分析

    • 什么时候可以用TM?

    如果同时 具备以下条件,你可以考虑TM:

    1)系统业务较直观,以CRUD操作比较集中

    2)整个开发的指导思想是数据驱动

    3)所选用的平台有成熟的库-表操作库支持

    • TM的优点?

    1)类似关系数据库的数据操作方式非常直观,使得设计和编写数据操作功能的代码简单高效

    • TM的缺点?

    1)TM需要完全的数据驱动,从业务到UI传递、存放数据都要以表结构形式,造成一定程度上的不灵活

    2)当业务并非CRUD集中型操作,特别是领域模型和数据库表模型差异较大时,使用TM组织业务的难度非常大

    3.3、Active Record

    3.3.1、概述

    Active Record(以下简称AR)是一种面向对象的业务逻辑组织方式。AR适用于在业务较简单的情况下,应用面向对象思想进行设计。它的基本思想就是将领域中每个实体抽象出一个业务类(BO),然后,将这个实体的数据和行为封装成类的属性和方法。特别的,将CRUD功能也封装进BO中。也就是说,AR中的BO同时具备业务方法和持久化功能。其本身具有ORM的特性,其内部要处理关系实体间的关联问题。

    使用AR时,一般最好有相应框架支持,否则完全手工实现AR有点麻烦。像Castle框架中就有AR功能,Linq to sql也有AR的意思。使用AR后,一般不需要再单独使用数据访问层。

    AR的组织架构如下图:

      

    图3-3、Active Record架构示意

    从图3-3中可以看出,AR对业务领域进行了一个简单的OO抽象,将各个实体抽象为AR业务对象,AR业务对象内含有数据、业务方法及数据访问相关的 ORM方法。另外,AR业务对象要维护实体间简单的一对多和多对多等关系。

    3.3.2、分析

    • 什么时候可以用AR?

    如果同时 具备以下条件,你可以考虑AR:

    1)系统业务较直观

    2)想尝试使用或习惯于使用OO进行系统设计与实现

    3)平台上有成熟的AR框架可以用

    • AR的优点?

    1)使用OO的方式进行设计与实现,能在一定程度上避免冗余代码问题)

    2)使用AR后,与某个实体相关的数据和业务全部集中于AR业务对象中,模块内聚性好,便于维护

    3)实践证明,AR结构的业务层编码效率很高

    • AR的缺点?

    1)AR仍需要关注数据之间的关联,在一定程度上带有数据表和影子,没有完全摆脱数据驱动,所以当业务领域和数据库结构差距大时,实施困难

    2)AR的CRUD是以个体为粒度的,当进行批量操作时,如一次查数千个数据,如果严格尊从AR就需要生成数千个AR业务对象,这简直是场灾难。所以在有大规模查询的情况下,可以考虑使用TS配合AR

    3)如果业务非常复杂,AR将力不从心

    3.4、Domain Model

    3.4.1、概述

    Domain Model(以下简称DM)是一种适合领域驱动和为复杂业务系统组织业务的面向对象业务逻辑组织方式。前面三种架构模式都有一个共同的缺点——不适合业务复杂的系统。那么何为复杂何为简单?很抱歉,我给不出明确答案,而且我估计世界上任何一个人都很难给出标准的无争议答案。因为软件系统中的复杂和简单本身就是一个难以量化的指标,很多时候,只能靠专业人员的经验了。

    我个人估计,世界上95%的软件系统其业务难度都不会超出上述三种模式的能力范围,而若你不幸遇到剩下的5%,恐怕目前只有Domain Model能帮你了。Domain Model是一种纯面向对象的业务架构模式,它的核心思想是获取领域中的各种实体抽象,然后完全按照现实领域中的情况去建模和运行。并且业务对象是“持久化无知”的。 关于“持久化无知”下面细讨论。这个模式十分复杂和难以掌握,但一旦掌握并使用,其能力绝对会超乎你的想象。

    下面看一下DM的架构示意图:

      

    图3-4、Domain Model架构示意

    从图3-4中可以看出,DM看上去是个十分纠结的模式,而实际上,它确实很纠结!实际上,我认为如果能熟练掌握并运用DM进行业务逻辑的组织,那这人绝对是架构师中的大师级人物(我目前是做不到)。

    还是先结合图示分析一下DM中的要点。

    第一,DM中的业务对象是纯业务对象,不含数据访问操作。这个可以和AR中的业务对象对比一下。也就是说,DM中的业务对象是纯业务对象,它们只关注与业务的实现。

    第二,DM的组织内部对象多,关系复杂,而这种关系不再只是那种简单的一对一、一对多的关系,而是领域中的各种依赖和关联的抽象,关系类型多,非常复杂。

    第三,DM需要业务部分“持久化无知”。所谓持久化无知,指业务部分只需执行业务功能,而不必关系持久化。在使用DM时,必须设计一套ORM机制(注意这里用到了“机制”一词,而不是“框架”或“库”),使得在业务系统运行时,自动在必要的时候执行数据持久化操作。这也是为什么上图数据源和业务层间的箭头是虚线的关系。

    上文曾说过,DM要最大程度模拟现实情况。而现实世界和软件世界最大的区别就是现实世界是“内存无限大、永不停机的”,可以把现实世界看成在一个无限大内存里永不停止运行的程序。而软件世界不同,它的内存有限制,我们不能将所有对象都放在内存,而且一旦掉电,它就会停止运行,正因如此,我们才需要持久化机制去配合DM模拟现实世界。为了让业务更接近现实,它必须对持久化过程毫无感觉。而一套持久化机制默默为其营造了一个好似内存无限大、永不停机的环境,因此DM才得以发挥威力。

    第四,DM往往需要Services Layer的配合。因为DM内部仅有一个个业务对象,它们互相调用,并没有提供一个友好的接口与UI交互,所以在使用DM时,往往在其上对各种UI需要的服务进行封装(回顾一下Facade模式),形成一个Services Layer,以方便与UI交互。

    3.4.2、分析

    • 什么时候可以用DM?

    如果同时 具备以下条件,你可以考虑DM:

    1)系统业务极为复杂

    2)有功底扎实和经验丰富的精通OO的架构及设计师

    3)项目经费和时间充足

    4)贯彻领域驱动设计

    • DM的优点?

    1)完全的OO思想运用,将使你享受到OO的所有优势

    2)应付复杂业务的强力杀手锏。如果DM运用得当,将会使得复杂业务被高效解决

    • DM的缺点?

    1)使用门槛极高,难度极大,如果团队中没有精通OO和系统架构且经验丰富的专家很难实施

    2)设计过程极为复杂,可能会导致设计瘫痪

    3)如何设计良好的ORM机制辅助DM是一大难题

    3.5、各种架构模式的比较及选择

    相信看过上文内容后,各位一定对各种业务组织模式及其特点、优劣、应用场景有了清晰地认识,如果我在这里再喋喋不休讨论各种模式的比较及如何选择,难免有侮辱各位智商之嫌O(∩_∩)O~,所以这里我只给大家呈现一幅决策网络图,以期起到一个梳理和归纳总结的作用。

    图3-5、业务架构模式决策网络

    (郑重声明:图3-5为本人原创,并非摘录自已有文献,因此此图的选型流程仅代表个人意见。由于笔者水平有限,不能保证此图一定合理和正确。因此在实际选型时请多多参考已有文献及咨询相关专家,此图只起总结归纳和探讨作用,不作为任何指导和规范。若因遵循此图选型而给项目带来的任何经济及其他方面损失,笔者不承担任何责任。)

    4、结束语

    本文通过两篇文章的篇幅,先后介绍了业务逻辑的定义、相关理论及经典的业务逻辑相关的架构模式。本文中阐述了不少已有理论,亦掺杂诸多个人理解及看法。因此请各位在阅读时多进行批判吸收,同时参考以后经典文献及书目综合理解业务逻辑,切勿仅看我一家之言。

    另外,由于本文仅仅是综述性文章,不能具名业务逻辑的各个方面,在深度上也基本是浅尝辄止。因此,若希望深入理解业务逻辑,可以看到相关经典书籍及文献。

    展开全文
  • 在语言、文字和图形这三种表达方式中,前两种表达方式中的逻辑是需要听者/观者用脑去思考、架构,才能知道作者想要表达的逻辑(还不一定正确),但是逻辑图不同,它的逻辑是直接“画”出来的,用眼睛可以“看到逻辑...

    前4 篇介绍完了逻辑图三元素中“要素”的表达方式,下面要介绍逻辑图三元素之二“逻辑”的表达方式。逻辑表达的说明分为两篇,第一篇说明“业务逻辑”的表达方式,第二篇说明“数据逻辑”的表达方式。

    在语言、文字和图形这三种表达方式中,前两种表达方式中的逻辑是需要听者/观者用脑去思考、架构,才能知道作者想要表达的逻辑(还不一定正确),但是逻辑图不同,它的逻辑是直接“画”出来的,用眼睛可以“看到逻辑”,对错一目了然。逻辑是逻辑图中的灵魂、主线,从一张逻辑图上可以大概看出作者的逻辑思维水平和逻辑表达能力。

    1. 逻辑的概念

    ■逻辑:指的是思维的规律和规则,是对思维过程的抽象。

    在对分析与设计中逻辑表达方式的说明之前,先借鉴参考一下不同的领域对逻辑的解释,它们可以帮助理解逻辑的概念,比如逻辑定义有:
    □逻辑是思维的规律和规则,是对思维过程的抽象;
    □逻辑表明了规律,事物完成的序列;
    □逻辑表现了事物流动的顺序规则;等。

    1)不同领域的逻辑表达
    图1分别给出了语言文字、数字电路以及软件数据关系三种不同的逻辑表达形式,图(a)是用文字表达的逻辑,它需要通过“阅读”的方式获取逻辑(直接看不出来),图(b)使用图形“符号”表达逻辑,图(c)使用“线条”表达逻辑。

    在这里插入图片描述
    图1 不同领域的逻辑表达方式

    2)业务设计中的逻辑表达
    在软件设计时采用的各类图形中是否存在着逻辑的表达呢?如果有,那么逻辑的表达形式是什么呢?参见图2,
    □首先将表达对象的图(a)通过拆分得到三个要素A、B、C,如图(b)所示;
    □将A、B、C三个要素,分别用分层图、分解图、流程图表达它们之间的关系,如图(c)所示;
    通过分层、顺序、连线的方法进行关联,虽然构成三种图形的要素是一样的,但是可以看出三个图具有三种不同含义,可以根据三种图形解读如下的信息,

    在这里插入图片描述
    图2 业务设计用图的逻辑表达示意

    □分层图:说明A、B、C在不同的层面上,表达了三者的粒度不同、或是层次不同;
    □分解图:说明由B和C集成了A,也可以说A的分解是B和C,三者为从属关系;
    □流程图:说明A、B、C的处理过程,A必须通过B才能够到达C,说明了顺序关系;

    如果能解读出上面的含义,那就说明“逻辑”不仅存在而且还能“画”出来,观者可以通过“观看”逻辑,从而解读出作者要传递的意图。

    2 业务逻辑的表达方式

    表达业务要素之间关系所用到的逻辑表达形式称之为“业务逻辑”,业务逻辑主要用于绘制业务架构图。在业务架构图中表达逻辑最为常用的形式有三种,即:关联、位置、包含,如图3所示。

    在这里插入图片描述
    图3 业务逻辑的表达方式

    其中
    □关联:利用关联线、箭头来连接相关的要素块,来表达要素块之间的逻辑关系。
    □位置:利用要素块的相对位置,来表达它们内在的逻辑关系。
    □包含:利用背景框,表达框内的要素是紧耦合、不同框内要素之间是松耦合关系。

    逻辑表达的符号虽然只有三种,但它们却是逻辑图中的“灵魂”存在,起着画龙点睛的作用。不论逻辑图中有多少要素,只要逻辑符号使用正确、准确,图的含义都可以表达得非常清晰。反之,要素的图标符号再少,如果逻辑不正确,也会发生“图不达意”的结果。

    注:表达业务逻辑形式当然不止这三种,但根据笔者的经验,如果这三种形式使用得当,基本上就足够表达一般业务架构图的逻辑意图了,相反,如果在表达逻辑上设计出太多的形式,反而会影响逻辑的传递与解读,因为并不是每个逻辑图的观者都了解你的逻辑符号是什么,这样会增加沟通成本。

    3. 逻辑的作用-业务逻辑的表达

    有了逻辑的概念,那么逻辑在实际的业务架构中是如何起作用的呢?
    【案例】做一个有关企业“成本过程控制”的方案,已知:构成成本的业务模块有5个,成本发生过程是由“合同管理”模块发起的,参见图4。

    在这里插入图片描述
    图4 成本过程的控制方案

    1)方案的编制方法如下
    图(a):给出的是业务模块一览,调整这些模块的相对位置进行成本控制过程的架构设计,通过调整模块可以得出2个架构方案:图(b)是架构方案1、图(c)是架构方案2。
    相同的5个业务模块形成了2个不同形式的架构图,下面从逻辑表达方式上(关联、位置和包含)分析这两张图中的不同含义。

    2)两个方案的相同处
    (1)要素:二个方案中都包含5个相同的要素:合同管理、人工管理、材料管理、设备管理、成本管理;

    (2)逻辑:在2个方案中,下面的业务内容都是相同的
    □合同管理:作用是签订合同、确定合同金额。合同管理是过程起点;
    □成本管理:作用是核算成本、确认最终是否发生了成本超标,成本管理是过程的终点;
    □成本合计:作用是对“人工管理、材料管理和设备管理”三个要素的产生的数值进行合计;

    3)两个方案的不同结论
    从方案1、方案2可以清晰地看出来的是:在方案1中,“合同管理”不与“成本管理”直接接触,但在方案2中两者发生了接触,由此带来了管理要求的变化;这个逻辑的变化的本质是业务事理的不同。前面的已经说明过:即使图中的要素的完全一样,由于逻辑的不同,最后的逻辑图的意图也会不同,这里只解读一下它们的差异点(不限于此):

    (1)方案1的解读
    □由于合同管理与成本管理不相关,所以签定合同时不向成本管理发送信息(不通知“合同总金额”);
    □将成本合计(人工管理、材料管理和设备管理)的数据汇总到成本管理即可;

    (2)方案2的意图
    □由于合同管理与成本管理相关联,所以签订合时要向成本管理送信(通知“合同总金额”);
    □得出的成本合计(人工管理+材料管理+设备管理)的结果,要与存在成本管理的合同总金额进行的对比(在合同签订时,合同管理已经向成本管理送信了),如果有超支,要预警;

    图形中代表逻辑图号的使用要非常的谨慎、小心,任何的连接、箭头方向、摆放位置以及背景框使用的微小误差,都可能造成逻辑传递的错误。

    ■扩展说明
    掌握逻辑的概念和方法,在分析工作中也会有非常大的帮助。

    举例,两名经历不同的需求分析师面对同一个谁也不熟悉的全新研究对象时,通常大家会预判说:经历丰富的分析师一定会因为他的“经验多”而做得更好,另一名年轻的分析师则会因为“经验不足”而做得差一些。

    但是在实践过程中,有3个项目经验的分析师与有10个项目经验的分析师相比,在面对双方都不熟悉的新研究对象时,如果前者具有很强的利用逻辑分析问题的能力,其做出来的结果不一定就会比以经验为主的后者差,特别是在项目的工期短、要求精度高的情况下,前者的成功概率可能会高于后者。也就是说从逻辑入手了解研究对象的人上手更快,更有可能在短时间内给出正确的分析结果。

    下一篇介绍“数据逻辑”的表达。

    详细的内容说明请参见《大话软件工程—需求分析与软件设计》一书。

    在这里插入图片描述

    展开全文
  • 常见的业务逻辑漏洞-整合篇

    千次阅读 热门讨论 2021-10-28 10:08:38
    业务逻辑漏洞就是指攻击者利用业务/功能上的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。 逻辑漏洞的破坏方式并非是向程序添加破坏内容,而是利用逻辑...

    笔者前言:
    作为一个地地道道的安服仔,每日的工作就是渗透测试,在测试的过程中累积了很多的经验,看到了各种各样奇葩的漏洞,于是乎便有了这样的一篇文章。以下文章均由本人测试发现并打码,侵删

    什么是业务逻辑漏洞

    业务逻辑漏洞就是指攻击者利用业务/功能上的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。 逻辑漏洞的破坏方式并非是向程序添加破坏内容,而是利用逻辑处理不严密或代码问题或固有不足,进行漏洞利用的一个方式。

    既然提到了完整性,相信大家在漏洞挖掘的时候经常会看到三个关键字,他们分别是保密性、完整性和可用性,那么他们又是什么,他们又代表哪些特性呢?

    信息安全工程师应该知道的事情

    机密性是确保信息仅被合法用户访问,而不泄露给非授权用户、实体或过程,或供其利用的特性

    完整性是指所有资源只能有授权方或以授权的方式进行修改,及信息未授权不能改变的特性

    可用性是指所有资源在适当的时候可以由授权方询问,即信息可被授权实体访问并按需求使用的特性

    在这里插入图片描述

    越权漏洞

    漏洞描述及测试方法:
    这类漏洞是指应用在检查授权(Authorization)时存在缺陷,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。这里就是说,漏扫是扫不出越权漏洞的,甚至说漏扫工具是扫不到业务逻辑漏洞的。
    这里是传送门->>>https://blog.csdn.net/weixin_48421613/article/details/111117004.

    修复方式
    对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作,建议在服务端对请求的数据和当前用户身份做校验检查。

    垂直越权

    漏洞描述及测试方法:
    在这里以我个人的理解来讲述,什么是垂直越权?垂直越权并非是低权限用户访问高权限用户的用户资源,这种说法是笼统的。我反而认为,垂直越权应该是:
    任意用户访问到不属于自己的功能,注意,这里不说资源,而是功能。通俗来讲,就是用户A拥有一个功能,那就是访问日志,假设他是一个日志管理员,他除了访问日志功能没有其他功能。用户B是一名访客管理员,他有一个功能,访问来访的用户。此时用户A可以访问用户B的访客通讯录,那么此时就是典型的垂直越权。
    而垂直越权不仅仅是get型,同样也有Post型,而get型的仅仅需要知道接口的uri地址即可访问,这类漏洞通常危害极大,且利用简单;而post型的垂直越权大多是接口的某个功能,比如说访问通讯录有一个新增访客功能按钮,而访客通讯录做了权限校验但是新增访客按钮并没有做,这个时候也是一样会形成垂直越权的漏洞,区别就是里面的参数是不太好构造的,相对而言利用起来会复杂一些,但是并不能否认其危害性。

    案例如下:
    此次为大家带来的案例是一个预约小程序,这个小程序只有两种用户,管理员用户以及访客用户。管理员用户拥有查看访客通讯录、新增访客功能;而访客用户则是啥功能都没得,仅能查看自己
    而此次垂直越权则是由于未做权限校验导致普通访客用户直接访问访客通讯录接口uri地址即可成功查看到
    在这里插入图片描述
    在这里插入图片描述
    很显然,访客用户是没有任何功能的,此时利用访客用户的手机去访问漏洞uri接口,成功查看访客数据内容

    在这里插入图片描述垂直越权测试方式式不难的,post方式就直接修改cookie这类的唯一验证身份的标识就可以,get型的直接访问漏洞页面即可,具体测试方式在以前的文章里有详细的介绍,请大家移步即可

    水平越权

    漏洞描述及测试方法:
    水平越权,攻击者能执行与自己同级别的其他用户执行的操作,即尝试访问与它拥有相同权限的用户资源,即水平越权

    这类说法也是不太负责任的,因为有时候普通用户与管理员用户很显然是不同级别的,但是二者都有一个查看公告的功能,只不过管理员能查看更多的公告,而普通用户只能查看自己的公告,此时若是普通用户成功的越权访问到管理员才能看到的公告信息,那么此时难道就是垂直越权了?我想不是吧

    所以我觉得,应该说是,攻击者能执行与自己相同用户功能的数据内容,即尝试访问与他有相同功能的用户的资源,即水平越权。

    这里的危害要相对于垂直越权危害更高,因为他的利用方式 更加的简单,毕竟你不需要执行任何的猜测目录数据的步骤,直接使用本功能的数据包,进行某一段数据的修改或许就可以访问到其他用户的用户资源。

    为了方便大家观看效果,这里以某一个学堂系统为案例。这个系统分为管理层、各个部门分层、各个公司分层,每一个用户访问的课程内容都是较其他用户不相同的。
    也就是说,员工甲是来自营销部门的,那么他只能查看营销培训课程;员工乙是一名营销部门总经理或者是其他公司总经理,那么他不但可以查看到本部门普通员工的课程,也能查看到针对于公司高管的课程内容。

    案例如下,这个页面是用户甲的课程
    在这里插入图片描述

    通过遍历他人的课程参数进行越权访问

    在这里插入图片描述这个参数构造复杂,此处仅为方便展示,因为按照测试案例,参数若是不可构造,构造复杂的也可以说是可证明安全的,这里给他算上是因为在其他管理接口存在垂直越权,可以遍历到课程的参数
    所以说在大家测试过程中,若是遇到这种不可遍历的参数,那么是不应该算的,这里仅为大家带来测试的方式,实际上无论是get型还是Post型,水平越权造成的参数实际上只有那么一个而已,大家只要找出这个参数便可以了。

    支付逻辑漏洞

    漏洞描述及测试方法:
    实际上这个情况常见的情况有:
    负值反冲、正负值对冲、甚至是直接修改数量单价、总价等等。
    负值反冲,就是说程序没有校验订单的取值范围,若是使用负值则可以进行支付逻辑利用;
    正负值对冲,是指,通过修改订单的数量或者是单价、总价来达到少付钱的目的,但是你的值不能是负值

    此次带来的案例,就是我在测试过程遇到的一个,部分课程需要加入购物车后充值购买,于是乎我将单价、总数进行更改,成功的达到了少付款的目的,一元购。

    案例如下:
    首先页面存在学时卡购买
    在这里插入图片描述
    加入购物车时,价格正常,此时不可以修改,否则会被拦截到
    在这里插入图片描述
    此时点击下一步,拦截数据包,数据如下
    在这里插入图片描述
    而后修改总价格
    在这里插入图片描述
    此时发送数据包,成功一元购
    在这里插入图片描述
    修复方式
    1.服务器端在生成交易订单时,商品的价格从数据库中取出,禁止使用客户端发送的商品价格。

    2.服务器端在生成支付订单时,对支付订单中影响支付金额的所有因素(比如商品ID、商品数量、商品价格、订单编号等)进行签名,对客户端提交的支付订单进行校验。

    短信炸弹

    漏洞描述及测试方法:
    是的,你没看错,短信炸弹严格意义上来讲也属于业务逻辑漏洞,诱发原因是没有进行时间戳等校验,此处与信息安全描述的重放攻击类似,在测试过程中,某接口存在发送手机验证码的功能,但是短信发送平台没有去识别该用户发送验证码的时间等,导致短时间内可以重复的发送大量的短信校验码,不但对系统资源进行了消耗,同时也对用户造成了恶劣的影响。

    修复方式
    最简单的就是短信平台对同一手机号进行识别,一定时间内不允许继续发送验证短信请求,也就是所谓的一分钟内不允许继续请求

    案例:
    某平台查询信息时需要请求验证码进行身份校验
    在这里插入图片描述

    点击发送验证码时,使用burp进行拦截,同时放入至Intruder模块,重复发包10次
    在这里插入图片描述
    发送成功
    在这里插入图片描述

    未授权访问

    漏洞描述及测试方法:
    未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,不需要输入密码,即可通过直接输入网站控制台主页面地址。

    通俗的来讲,就是你本来需要登录才能实现的功能,你现在不需要登录就能看到,这类漏洞最容易测试,同时也最容易被忽略,测试方式只需要打开新的隐私浏览器进行访问,或使用burp进行数据包拦截,而后将所有的用户信息全部删掉,若是还能正常访问,那就是存在此漏洞

    修复方式
    在系统中,加入用户身份认证机制或者tonken验证,防止可被直接通过连接就可访问到用户的功能进行操作

    案例:

    某路由器存在一处漏洞,此漏洞其实是路由器配置页面,只需要构造一条参数即可对该页面进行访问,而后直接便可以获取到该路由器登录页面的用户名以及密码。

    在这里插入图片描述
    此类漏洞不容易被察觉,此处说是未授权访问,不如说也是信息泄露
    所以我按照信息泄露来了一波
    在这里插入图片描述

    用户名枚举

    漏洞描述及测试方法:
    这个没啥好说的,在登录的时候,输入不存在的用户名和错误的密码,若是提示“该用户并不存在”,则证明该漏洞存在。
    我遇到的一个奇葩预约系统,对用户校验的时候显示校验用户的身份和访客的身份,若是访客存在密码错误,便提示“该访客密码错误”,说实话,挺low的

    修复方式
    统一所有的提示信息为“用户名或密码错误”

    案例如下:
    在这里插入图片描述

    验证码问题

    这里玩法就比较多了,验证码这里你可以说是图形验证码,你也可以说是短信验证码。

    验证码不失效

    漏洞描述及测试方法:
    这里说的是图形验证码使用过一次未立即失效引起的问题,在我遇到的案例中,都是那种验证码使用后依然可以继续使用,这里测试建议抓包之后,直接在不放包的情况下放入之burp的Intruder模块进行暴力破解测试

    修复方式
    使用过一次验证码后,立即注销即可

    案例:
    在这里插入图片描述

    短信验证码可预测

    漏洞描述及测试方法:
    这里的短信验证码可预测,是指的在发送短信验证码的同时,拦截数据包请求,而后进行发包,会看到返回的手机验证码,或在发送请求短信的时候,即将发送至手机里的验证码出现在请求数据吧内,这两种情况我都遇到过。

    修复方式
    不要将验证码返回即可

    案例:
    在这里插入图片描述
    获取验证码的同时进行数据包拦截
    在这里插入图片描述

    在这里插入图片描述

    与手机接受到的验证码对比,一毛一样
    在这里插入图片描述

    短信验证码绕过

    漏洞描述及测试方法:
    这里指的绕过其实就是特权号码,比如说0000 1111 这种的,或者输入任意的验证码,而后直接修改code返回值就可以,这个我没遇到过特权码绕过,遇到过登录的时候进行code返回值进行更改登陆成功的

    修复方式
    删除特权码,不要仅仅对code返回值进行校验即可

    短信验证码暴力破解

    这里面是因为短信验证码过于短,只有四位,输入错误次数无限制,并且失效时间过长,且使用一次之后并不失效引起的。

    大家都知道burp是有枚举模块的,若是短信验证码太短了那么枚举的方案就会很少,大大的加大了爆破成功的可能

    修复方式
    限制输入错误的次数,错误五次需要重新获取;
    尽可能是有六位验证码;
    失效时间建议不要超过五分钟;
    使用过一次立即失效

    这里我遇到的案例,其实都遇到过,但是由于时间实在是过于久远,所以就不上图了,大家心领神会即可,毕竟没有什么测试难度

    登录认证绕过

    漏洞描述及测试方法:
    通常存在于仅适用前端校验,可以通过关闭js特效或者是伪造responsed的code值进行绕过

    修复建议:
    不使用前端校验,严格校验用户的数据

    案例:
    输入任意用户名密码
    在这里插入图片描述
    点击登陆按钮同时使用抓包工具进行数据包拦截

    在这里插入图片描述
    修改code参数
    在这里插入图片描述

    登录成功
    在这里插入图片描述

    密码重置漏洞

    漏洞描述及测试方法:
    在得知他人的手机号码的时候,通过修改response返回值欺骗服务器进行重置密码

    修复建议:
    正确的校验验证码,不要使用前端校验

    示例:
    1.点击普通用户找回密码,输入用户名
    在这里插入图片描述2.修改返回数据值
    在这里插入图片描述在这里插入图片描述3.完成第一次绕过,输入任意验证码,如法炮制
    在这里插入图片描述在这里插入图片描述4.输入新的密码
    在这里插入图片描述
    在这里插入图片描述
    5.输入用户名admin 密码 ******登录成功
    在这里插入图片描述

    SSO认证缺陷

    漏洞描述及测试方法:
    SSO认证存在缺陷,可越权登录他人账户。登录的过程中拦截数据请求,尝试修改cookie、uid等明显的参数

    修复建议:
    正确的配置用户的权限信息,不要使用简单的cookie或session

    示例:
    首先访问某达登录页面
    在这里插入图片描述

    此时用户为普通用户,登录后仅有一个功能
    在这里插入图片描述退出登录重新登陆,同时拦截数据包如下
    在这里插入图片描述尝试修改cookie为admin

    在这里插入图片描述发送数据包,功能出来了
    在这里插入图片描述

    空口令漏洞:

    漏洞描述及测试方法:
    找到网站登录页面,尝试输入用用户名,不使用密码直接进行登录。若是不使用密码直接登录则存在空口令

    修复建议:判断输入密码是否为空,禁止空口令登录。

    案例:
    又又又是一次漏洞挖掘,还是某个神秘的路由器,在控制台页面明显是需要登录的

    在这里插入图片描述
    当我未使用密码的时候,点击登陆,神奇的发现,登录成功
    在这里插入图片描述
    由于CVND是没有空口令的,所以写了一个未授权访问

    在这里插入图片描述

    会话固定

    漏洞描述及测试方法:
    在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说没有建立新session,原来的session也没有被销毁)。攻击者事先访问系统并建立一个会话,诱使受害者使用此会话登录系统,然后攻击者再使用该会话访问系统即可登录受害者的账户

    简而言之,就是说,当sessionid附着在url的get请求里,危害才会最大化,因为这样的话可以通过钓鱼链接的方式诱导用户去登录,而后利用此特性直接使用该生效的sessionid进行登录。

    修复方式:
    在用户提供的认证信息(例如用户名和密码)、相应的权限级别发生变化时,服务器端应重新生成SessionID,并强制失效之前的会话

    案例:
    时间太久,找不到了

    会话重用

    漏洞描述及测试方法:
    用户退出系统后,服务器端Session未失效,攻击者可利用此Session向服务器继续发送服务请求。
    最常见的其实就是你登录之后,点击注销后,此时页面退回至登录页面,使用浏览器自带的退回上一页功能,依然可以返回至注销前页面

    修复方式:
    用户退出系统后,服务器端应清空此用户的Session信息

    案例:

    点击退出登录按钮
    在这里插入图片描述
    此时已退回至登录页面
    在这里插入图片描述
    点击浏览器返回按钮,成功回退至注销前页面
    在这里插入图片描述

    重放攻击

    漏洞描述及测试方法:
    关键业务操作未作token或者唯一标识码,导致攻击者可以重复多次进行请求,导致恶意操作。如重复交易等问题。

    这里测试方式便是,在请求的时候进行burp抓包,而后重复的发送数次,若是成功发送,则是存在此漏洞

    修复方式:
    服务端应用程序应检查客户端提交的数据的唯一性,如使用流水号、时间戳、token等,并将流水号、时间戳等进行签名。

    案例:

    新增访客示例
    在这里插入图片描述
    随意选中一个数据作为枚举点
    在这里插入图片描述
    发送数次,皆成功
    在这里插入图片描述
    返回验证,发现重放成功,成功批量注册数个用户
    在这里插入图片描述

    以上便是较为常见的业务逻辑漏洞了

    展开全文
  • 企业业务逻辑常见风险

    千次阅读 2021-01-12 15:06:07
    开发人员的安全意识薄弱(只关注功能的实现,而忽略了用户使用过程中个人行为对Web应用程序业务逻辑功能的安全影响)和开发代码的频繁迭代导致了这些平台业务逻辑级的无休止的安全风险。业务逻辑漏洞主要是开发人员...
  • java业务逻辑怎么写?

    千次阅读 2021-02-28 17:55:40
    现在Java项目一般都是用...一个请求到达后端之后会根据请求的路径找到对应的Controller,Controller会调用相应的业务Service,Service会调用DAO,DAO去执行具体数据库查询操作。同时DAO返回数据到Service,数据经...
  • 三层架构之业务逻辑

    千次阅读 2022-02-23 21:41:34
    今天我们讲一讲三层架构中的业务逻辑层 1、业务逻辑层的介绍 业务逻辑层(Business Logic Layer,简称BLL)是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关...
  • 登录页面业务逻辑实现

    千次阅读 2022-04-15 14:17:15
    登录的业务逻辑 1.输入用户名和密码,获取token(服务器去数据库查询用户名和密码是否正确,正确则返回一个token) 2.通过token返回用户信息 3.存储token和用户信息 4.跳转主页面 token: 1、Token的引入:...
  • 业务逻辑流程图

    万次阅读 多人点赞 2019-06-06 16:26:04
    用Axure注释逻辑 元件的逻辑有5种,具体如下: 功能逻辑:详细讲解该功能的逻辑。 交互逻辑:对页面之间的...在软件系统架构中,软件一般分为三个层次:表示层、业务逻辑层和数据访问层: http://www.360doc.com/con...
  • 业务逻辑详解

    万次阅读 多人点赞 2018-01-02 13:51:48
    不同的项目有不同的功能,不同的功能需要不同的实现,实现这些核心功能的代码就叫业务逻辑 比如让你实现一个功能,给你两个数,让你获取它的和,你所写的如何才能获得任意给定的两个数的和,这个程序实现过程即可...
  • SpringBoot框架实现简单业务逻辑

    千次阅读 2022-04-08 21:30:40
    SpringBoot框架实现简单业务逻辑
  • java业务逻辑,写在哪里比较好?

    千次阅读 2021-03-12 20:36:04
    java业务逻辑,写在哪里比较好?对于这个问题,我想说的是:规范是死的,人是活的,一般情况下,我们可以根据不同的 java 框架规范的目录来写,特殊情况下也可以自定义。问题分析接触过 java 的同学可能都知道,java...
  • 传统项目开发中,代码分层架构大概是controller层,Service层,Dao层,在SOA架构中会有facade层,Service层,Dao层,两种方式都是将所有的业务逻辑集中在Service层,包括业务参数的校验逻辑,业务的核心逻辑,对第三...
  • 架构设计——业务逻辑层概述

    千次阅读 2020-11-21 09:51:00
    业务逻辑层是专门处理软件业务需求的一层,处于数据库之上,服务层之下,完成一些列对Domain Object的CRUD,作为一组微服务提供给服务层来组织在暴露给表现层,如库存检查,用法合法性检查,订单创建。 业务逻辑层...
  • 业务逻辑开发套路的三板斧

    千次阅读 2020-02-02 11:21:00
    转自:代码这件大事背景:作为一个研发,我们工作中都会处理面临下面这些困惑:又加需求,一个方法本来就处理了 300 行,现在又加 50 行。状态逻辑太多了,产品第 2 期又加了一个逻辑,代...
  • 三层架构(3-tier application)通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。1、表现层(UI):通俗讲就是展现给...
  • 根据职责分明的设计原则,人家UserService就只该管用户管理部分的业务逻辑,你老让它干别人干的事,它当然不高兴了! 那该怎么拌?凉拌?不不不。。。我们可以通过spring的事件机制来实现解耦呀。利用观察者设计模式...
  • 分离 UI 和业务逻辑 分离业务逻辑会使其非常易于达成我的一个其它目标,就是迁移到更安全的密码强度估测算法。 编写回归测试 在着手进行任何重构之前,我总是会编写一些基础的回归测试。我想确保我的改变不会破坏既...
  • 业务逻辑漏洞

    千次阅读 2018-11-23 04:31:51
    业务逻辑漏洞定义: 业务逻辑漏洞是指由于程序逻辑不严谨或逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误。 业务逻辑漏洞特性: 业务逻辑漏洞只出现于业务流程中(模块功能),也就是说网站的部分都有可能...
  • 什么是业务逻辑

    万次阅读 多人点赞 2018-09-04 20:32:07
    不同的项目有不同的功能,不同的功能需要不同的实现,实现这些核心功能的代码就叫业务逻辑 比如让你实现一个功能,给你两个数,让你获取它的和,你所写的如何才能获得任意给定的两个数的和,这个程序实现过程即可...
  • 精益求精是对代码大道至简的永恒的追求,也是我们在处理业务逻辑代码中不断提高自己能力的过程。 如果要真正写好,要把逻辑写得清晰简单易用,功能健壮稳定,性能同时达到要求的话,很难 ...
  • 用户下订单业务逻辑

    千次阅读 2019-05-30 18:12:55
    采取这样的方式是将后端实体、前端请求实体、传输实体互相分开,便于分析业务逻辑。 From 类: 如果前端传入过来的是JSON字符对象,其中包含的属性比较多的时候,就需要表单类。经常用于实名认证、用户下订单等...
  • 1. 加深对业务逻辑漏洞的理解。 2. 掌握篡改交易数据这个业务逻辑漏洞的测试方法。
  • 什么是业务逻辑

    千次阅读 2019-06-14 18:20:44
    参考: ... http://www.voidcn.com/article/p-wifdkunz-nt.html 我来定义一下,业务逻辑就软件来讲就是软件所实现的功能,ui可以变,价格可以变,只要功能不变,业务逻辑就不变 --------------------------------...
  • 复杂业务逻辑问题记录

    千次阅读 2018-12-19 16:40:50
    复杂业务逻辑 在项目中碰到的业务需求,有的确实很合理,但是逻辑上却也十分的复杂. 这里记录一下,让我困惑的问题.希望随着技术和经验的增长能够解决下列的问题. 随机抽取N个人并且符合条件: 示例条件: 随机抽取 5 ...
  • 业务逻辑之终极分析

    千次阅读 2018-08-26 20:01:20
    细说业务逻辑     前言 记得几个月前,在一次北京博客园俱乐部的活动上,最后一个环节是话题自由讨论。就是提几个话题,然后大家各自加入感兴趣的话题小组,进行自由讨论。当时...
  • 三层架构:表示层-业务逻辑-数据层

    万次阅读 2018-08-12 23:32:53
    三层架构:表示层-业务逻辑…   原文地址:三层架构:表示层-业务逻辑层-数据访问层 作者:灰烬 三层架构和MVC是两个东西。 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承...
  • 所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。 分层是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个...
  • 业务逻辑具体包含:验证、计算、业务规则等等。 DAL:(数据访问层): 与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些...
  • web网站功能实现的业务逻辑分析

    千次阅读 2018-12-16 09:59:29
    业务逻辑:写代码前先要搞懂业务逻辑(最重要) 前端查看请求接口:需求分析 、接口中参数、要调用什么表、表之间关系、要返回什么数据、前端怎么接收。 后台java接收:响应前端请求接口、一层一层对应写出实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,149,875
精华内容 459,950
关键字:

业务逻辑

友情链接: grnn_nrqi_code.rar