B/S系统常见缺陷整理和解决方案

最近部门整理了今年所有项目测试团队提出的BUG,筛选了几十个作为常规通用的缺陷,我根据这些缺陷内容,去掉和业务相关的知识,整理出了一份缺陷描述和解决方案。

其实WEB系统中常规的缺陷分类后也就那么多,但汇总过程,有同事建议分类写得更通用点,但我想了下,写了后大家可能更看不懂,本来常犯的错误也就这么多,分类比如按照安全问题,性能问题,并发问题,可能描述更专业,但开发、测试团队的人看到可能太官方和自己无关,自己也不会引起重视了。所以我的分类和问题描述可能更口水话一点,但应该能让每个人都很快看得懂。

下面写下我整理的一部分,重要程度和犯错频率不分先后顺序:

一、不相信客户端的数据

缺陷描述:前台恶意伪造数据或页面的某些值未加载完成,用户发起一个请求但用了加载中的值,或请求的值本身就是恶意伪造的,导致后台抛出详细异常或导致sql注入,XSS等。

建议:不管前台数据是恶意伪造还是由于网速慢页面值未加载完成,但用户用该不“常规”数据请求,后台都应该一一校验,比如JS前段验证只是为了一定程度减少后后请求压力,后台代码应该再次校验客户端的任何数据,SQL参数应该参数化等。

二、页面未设置友好错误

缺陷描述:页面由于未对500,404等HTTP错误设置友好页面,导致前台抛出了细节的错误情况

建议:配置500,404等HTTP错误友好页面

三、ajax加载完成前后对页面事件的控制

缺陷描述:ajax请求前后对页面的其他新请求未进行限制,导致前一个ajax未处理完成,后续又在执行依赖前一个ajax返回数据的请求

建议:如果前台页面存在依赖关系的新请求(包括ajax),应在新请求时判断前一个请求是否完成,如果未完成,则等待或提示。

一个重要的ajax请求前应该设置某些按钮不可用,ajax请求完成后再把按钮设置为可用。这样该重要ajax请求完毕后才能点击其他操作

四、后台平行、垂直权限验证

缺陷描述:后台未对该请求判断该用户是否有权限操作本请求的数据,而只是判断了是否有权限操作这个链接或根本没有判断是否有权限操作该链接,该问题常会导致查看所有人订单或查看管理员数据

建议:权限控制除了控制当前用户权限是否有权限操作本请求地址,还需要判断是否有权限操作这条数据

五、一笔订单多次退款四舍五入问题

缺陷描述:单独作为一项,原因是支付退款是非常重要的环节。任何涉及支付退款的都可能有该问题。一个订单分多次退款,由于四舍五入的问题,会导致全部退款加起来会大于支付价格,比如大于0.01元

比如99.5元的订单,四舍五入精确到分,第一次退款33.17元,第二次退款33.17元,第三次退款33.17元,总退款:99.51元。

建议:我认为有两种解决方案:

1、支付按照四舍五入取大计算,退款按照取小计算,比如0.009元也算0.00元。这样不管分多少次退款,极端情况下,可能全部退完了,还会剩余0.02元更多点,适合极端情况一个订单分多次把所有费用退完,但供应商或平台最后可能还赚几分钱。但这个和业务有关系,需要确认。
2、退款每次按照四舍五入退款,但如果一个订单最后一笔退款则不再按照四舍五入退款,而是把支付金额减去已完成的所有退款金额,剩余的钱作为最后一次全部退,这样保证用户和供应商或平台都不会多退或多收的情况。

六、第三方框架问题

缺陷描述:第三方框架不熟悉或自身问题,导致安全或性能或其他问题

建议:普遍性问题,这个尽量保证用新版本的第三方框架,或在测试环境多测试后再上线,随时关注第三方框架的官方网站

七、浏览器后退问题

缺陷描述:该问题单独作为一类,是因为WEB系统非常典型的问题,浏览器后退导致订单可以再次退款,再次新增..数据之类的问题

建议:两个层面导致的问题,第一个是前台页面缓存,第二个是后台没有对重复数据做判断。解决思路:
1、对重要操作的页面设置禁止客户端缓存,这样浏览器不能后退或后退的页面已过期。
2、即使浏览器可后退,或通过请求回放手工制造请求等恶意重复提交,后台也应该判断,尤其是修改某操作,比如订单退款,导致一个订单退款多次;新增操作根据实际情况做判断,比如新增订单再后台再新增订单。后台对任何请求不管是重复提交还是新提交,都应该校验是否可以执行该操作。

八、服务端并发验证问题

缺陷描述:并发问题是任何系统需要考虑的问题,也是可能导致系统存在逻辑错误的地方

建议:重要业务修改,需要保证业务逻辑层面的事务,如果涉及多台后端应用服务器就更复杂了。比如单机用锁代码块能保证单机不出问题,但随机多机请求又可能出现问题,比如恶意用户用一个联通网络和电信网络同时对一个订单退款,如果单机锁代码块,可能导致联通网络请求A服务器,电信网络请求B服务器,A,B都成功导致退款2次。除了单机锁解决,可解决的思路:
1、重要修改业务,并行操作依赖一个单独的服务器或服务,该服务判断是否有第一次操作并加标记,另外一个请求再通过该服务器或服务判断是否可以继续操作,因此锁操作只需要在该服务器或服务严格判断锁即可,不会导致并发问题。但成本相对较高。
2、如果业务都是操作同一个数据库,那对数据库表增加一个状态字段,比如正在修改状态,多个事务同时请求,第一个请求修改该字段并where该字段为前一个状态字段,第二个请求修改该字段同样执行该sql。但第二个sql修改返回条数为0,因为被第一个sql修改成功了,where前一个状态不成立,所以范围影响行数为0。因此第二个事务请求就可以返回:有其他请求正在修改该订单,不能同时修改。这个解决思路成本较低。
上面主要说修改业务,如果新增业务,那多并发可以不很细致处理,因为可以把它当成不同时间段的多次请求新增数据,根据业务需求再做处理。

九、临界判断问题

缺陷描述:如果字符串split或indexof或判断数组长度等,经常导致遗漏最后一个或第一个数据

建议:首先字符串或数据集合第一个或最后一个数据需要先清理数据,比如1,2,3,最后一个,需要清理,清理完数据后再处理。处理数据也需要注意比如Length,size()的大小和数组对象从0开始计算的关系等问题。

十、对象批量update问题

缺陷描述:这个问题是后台代码的问题,有时候表数据太大,为了省事,直接update(表),但表里实际有的是敏感信息,比如密码,手机号,身份证等,这些数据之前是做了特殊处理的,比如有*号等,批量更新后可能导致字段被空字符串替换,或覆盖为明文了。

建议:尽量不批量update对象,update什么字段修改什么

十一、业务理解和处理问题

缺陷描述:由于对业务理解或沟通不清楚导致前段展现或业务逻辑不准确的问题

建议:重要业务逻辑需要多沟通确认,上线前多测试复杂业务逻辑。对业务逻辑不确定的地方,要用白名单,比如在什么情况才怎么处理,而不是黑名单或没有名单,直接就处理了

十二、JS兼容问题

缺陷描述:JS兼容问题是WEB开发最常遇到的问题

建议:根据业务要求是否兼容什么浏览器,上线前针对浏览器做测试,或比如现在阿里有浏览器兼容性自动化测试工具,可以业务测试完成后自动化测试JS和CSS兼容性问题。

十三、浮点数计算问题

缺陷描述:后台代码计算数据最经常遇到的问题

建议:浮点数计算数据会有精度问题,JAVA里float,double计算改为bigdecimal计算

十四、数据库不规整数据导致前台异常

缺陷描述:尤其在测试环境或老项目里,数据库里有字段不规整,导致前台异常或展现错误

建议:保证数据插入时数据就是按照要求放入数据库,数据展现也有容错机制,如果数据字段不正确就用默认数据或留空,保证页面能正常请求和返回

十五、内存缓存对象设计问题

缺陷描述:做系统经常会用内存缓存数据,内存缓存什么对象可能影响后续的业务逻辑

建议:页面缓存数据应该尽量精细,比系统为了限制同一个用户同时退款,可能在内存缓存了这个用户是否在退款和以及退款金额,但内存没有记录这个用户的什么订单在退款,导致其他订单这个期间也不能退款了。
内存缓存对象也需要建模,让内存对象字段尽量细化,保证满足各种应用场景。

上面15个是我根据2015年部门测试团队BUG情况,整理的一些通性和业务无关的缺陷描述和建议,肯定不全,而且这些问题的建议也可能不准确,仅限参考,如转载,请注明来自:http://lawson.cnblogs.com。

时间: 2024-12-14 18:44:20

B/S系统常见缺陷整理和解决方案的相关文章

Web系统常见安全漏洞及解决方案-SQL盲注

关于web安全测试,目前主要有以下几种攻击方法: 1.XSS 2.SQL注入 3.跨目录访问 4.缓冲区溢出 5.cookies修改 6.Htth方法篡改(包括隐藏字段修改和参数修改) 7.CSRF 8.CRLF 9.命令行注入 今天主要讲下SQL盲注. 一.SQL 盲注.发现数据库错误模式.跨站点脚本编制 严重性: 高 类型: 应用程序级别测试 WASC威胁分类: 命令执行类型:SQL 注入 CVE 引用: 不适用 安全风险: 1.      可能会查看.修改或删除数据库条目和表   ---S

Windows XP与Windows 7系统常见漏洞

1.Windows XP系统常见漏洞 Windows XP系统常见的漏洞有UPNP服务漏洞.升级程序漏洞.帮助和支持中心漏洞.压缩文件夹漏洞.服务拒绝漏洞.Windows Media Player漏洞.RDP漏洞.VM漏洞.热键漏洞.账号快速切换漏洞等. (1)UPNP服务漏洞 漏洞描述:允许攻击者执行任意指令. Windows XP默认启动的UPNP服务存在严重安全漏洞.UPNP(Universal Plug and Play)体系面向无线设备.PC和智能应用,提供普遍的对等网络连接,在家用信

Linux常见命令整理(二)

权限设置 chmod  改变文件或目录的权限 格式 chmod 参数  文件名 r-读 w-写 x-执行 u-user 所有者 g-group 所属组 o-others 其他人 a-all 所有人 + 添加某个权限 - 取消某个权限 =  赋予给定权限并取消原来所有权限 除此之外,也可以使用数字来表示权限 r = 4 w = 2 x = 1 例如:chmod 777 a 代表修改文件a的权限是-rwxrwxrwx 其他的权限类似 chown 改变某个文件或目录的所有者 格式 chown 用户 文

【连载】数据库审计产品常见缺陷(1)-综述

随着信息化的发展,数据库安全问题成为当前政府和企业用户关注的焦点,数据库审计产品成为当前信息安全产品的新宠. 当前在市面上存在着几十种数据库审计产品,这些产品的来源大约有四种类型: 国内原先具有网络审计产品的厂商,在网络审计产品的基础上经过简单包装,推出的数据库审计产品,比如我国几大安全厂商推出的数据库审计产品: 国内厂商专门针对数据库通讯协议的特点,开发出专门的数据库审计产品,比如安华金和.思福迪.安恒.国都兴业和帕拉迪等: 国外的数据库审计产品,比如Imperva.Guardium等: OE

第九章、文件与文件系统的压缩与打包 Linux 系统常见的压缩命令

Linux 系统常见的压缩命令: 在Linux中,压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』 Linux 支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,彼此之间可能就无法相互压缩/解压缩文件. 所以,当你下载到某个压缩档时,自然就需要知道该文件是由哪种压缩命令所制作出来的,好用来对照著解压缩!虽然 Linux 文件的属性基本上是与档名没有绝对关系的, 但是为了帮助我们人类,所以适当的扩展名还是必要的! *.Z comp

配置系统未能初始化 错误的解决方案

今天修改了App.config,结果运行的时候出现了 "配置系统未能初始化" 的错误.找了半天才发现是下面的原因造成的: MSDN里写到"如果配置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素.". 配置系统未能初始化 错误的解决方案,布布扣,bubuko.com

实验六——bookstore系统模块测试缺陷报告

bookstore系统模块测试缺陷报告 缺陷编号:01.01.0001           发现人:..     记录日期:2016/6/11 所属模块:注册                       确认人:..     确认日期:2016/6/11 当前状态:公开             严重度:2       优先级:2 问题概述:点击进入结算中心出现404错误(购买一本书籍后的情况下) 问题描述:    1.图书分类->C语言程序设计,选择书籍<C#实用教程>: 2.输入数量1

铝合金阳极氧化的常见缺陷

外观缺陷是造成型材返工从而大幅度提高成本的主要原因.本文综述铝阳极氧化膜外观缺陷的主要特征,成因和对策.按照外观形态,可将阳极氧化表面缺陷分为三大类:(1)条纹(带)状缺陷;(2)斑点状缺陷;(3)不均匀(不正常)表面.由于条纹(带)状缺陷往往起因于熔铸和挤压,或其它机械损伤,本文只介绍后两类常见缺陷. 1 斑点状缺陷材料腐蚀.槽液污染.合金第二相析出或电偶作用等因素均可导致斑点状缺陷,分别介绍如下: 1.1 酸或碱浸蚀在阳极氧化前,由于铝材溅上酸液或碱液或者受到酸雾或碱雾作用而腐蚀,使表面局部

【连载】数据库审计产品常见缺陷(4)数据库对象解析错误

继上期为大家介绍了有关数据库审计多语句无法有效分割的问题,本期,安华金和围绕数据库对象解析错误分析数据库审计产品常见缺陷.数据库审计产品中一个重要需求是要有效记录下来SQL语句的操作类型.访问对象:根据这些操作类型和访问对象,审计产品可以有效地制订告警策略,可以有效地根据操作类型.访问对象进行事后的追踪与检索.我国相关部门的数据库审计产品标准中要求:应对数据库网络访问对象的名称进行准确审计,包括数据库服务器名称.IP名称.数据库名称.表.视图.序列.包.存储过程.函数.库.索引和触发器等. 目前