测试函数可以使用的次数限制
ID |
---|
WSTG-BUSL-05 |
总结
应用程序正在解决的许多问题都需要限制函数的使用次数或操作的执行次数。应用程序必须“足够智能”,不允许用户超过对这些功能的使用限制,因为在许多情况下,每次使用该功能时,用户都可能获得某种类型的好处,必须考虑到这些好处才能适当地补偿所有者。例如:电子商务网站可能只允许用户在每笔交易中应用一次折扣,或者某些应用程序可能采用订阅计划,并且只允许用户每月下载三个完整的文档。
与功能限制测试相关的漏洞是特定于应用程序的,必须创建误用案例,努力使应用程序/功能/操作的某些部分的执行次数超过允许的次数。
攻击者可能能够绕过业务逻辑并执行比“允许”更多的时间,从而利用应用程序谋取个人利益。
例
假设一个电子商务网站允许用户利用其总购买量的众多折扣中的任何一种,然后继续结帐和投标。如果攻击者在获取并应用一个“允许的”折扣后导航回折扣页面,会发生什么情况?他们可以享受其他折扣吗?他们可以多次享受相同的折扣吗?
测试目标
- 确定必须为可调用次数设置限制的函数。
- 评估函数是否设置了逻辑限制,以及是否对其进行了正确验证。
如何测试
- 查看项目文档并使用探索性测试,在应用程序或系统中查找在业务逻辑工作流中不应执行超过单次或指定次数的功能或特性。
- 对于在业务逻辑工作流中发现的只应执行一次或指定次数的每个函数和特性,开发可能允许用户执行超过允许次数的滥用/误用案例。例如,用户是否可以多次在页面中来回导航,执行一个应该只执行一次的函数?或者用户可以加载和卸载购物车以获得额外折扣。
相关测试用例
修复
应用程序应设置硬控制以防止 limit 滥用。这可以通过将优惠券设置为在数据库级别不再有效,在后端或数据库级别为每个用户设置计数器限制来实现,因为应通过会话识别所有用户,以更符合业务需求的方式为准。