深入解读《白帽子讲 Web 安全》之业务逻辑安全

目录

引言

1.账号安全

1.1注册账号

1.2登录账号

1.3退出账号

1.4找回密码

2.图形验证码

2.1验证逻辑

2.2强度

3.并发场景

3.1条件竞争

3.2临时数据

4.支付逻辑缺陷

4.1修改商品和订单金额

4.2客户端指定商品数量被篡改

4.3跳过支付步骤

小结


引言

在 Web 安全的广袤领域中,业务逻辑安全犹如一座隐藏在平静湖面下的冰山,看似不起眼,实则蕴含着巨大的风险。吴翰清在《白帽子讲 Web 安全》一书中,对业务逻辑安全的剖析犹如一把锐利的手术刀,精准地切入各个关键环节。接下来,让我们一同深入探索这一重要的安全领域。

1.账号安全

1.1注册账号

传统 Web 应用以公开的用户名作为账号标识,这就好比在自家门口挂了个写着 “贵重物品在此” 的牌子,方便了攻击者锁定目标进行密码破解。例如早期的一些论坛,用户名直接暴露,攻击者通过简单的字典攻击就能尝试破解大量用户密码。而如今,多数应用采用手机号或邮箱登录,结合可自定义的展示昵称,这无疑给攻击者的破解之路设置了更多障碍。手机号和邮箱相对用户名更为私密,且在找回密码等环节也能发挥重要作用。

在注册过程中,应用需要对用户名进行严格过滤。像 “Admin”“Service” 这类特殊用户名,一旦被别有用心的用户注册,就可能冒充官方人员进行诈骗等恶意行为。可以通过编写如下代码对用户名进行过滤:

def validate_username(username):

    special_usernames = ["Admin", "Service"]
    
    if username in special_usernames:

        return False

    return True

同时,注册流程中还存在诸多安全隐患。比如,要防范他人利用不存在的邮箱 / 手机号注册,这可能导致大量无效账号充斥系统,占用资源。还有绕过短信验证码限制的问题,攻击者可能通过抓包修改请求参数,跳过验证码验证。可以通过在服务端对请求进行严格校验,例如:

from flask import request

@app.route('/register', methods=['POST'])

def register():

    phone = request.form.get('phone')

    code = request.form.get('code')

# 校验手机号是否合法

    if not is_valid_phone(phone):

        return "手机号格式错误"
    
# 校验验证码是否正确

    if not check_code(phone, code):

        return "验证码错误"

# 进行注册操作

    return "注册成功"

1.2登录账号

登录成功后的跳转环节若未对目标 URL 进行校验,就如同在一个陌生城市随意上了一辆陌生人的车,极有可能被带到危险之地。例如,攻击者可以构造一个看似正常的登录成功跳转链接,引导用户进入钓鱼网站,骗取用户账号密码等敏感信息。

为了抵御暴力破解限制登录次数是一种常见手段。但简单地封禁账号或 IP 存在被恶意利用的风险,比如攻击者可以通过不断尝试错误密码,使正常用户账号被封禁。所以,常采用图像验证码等方式来增加攻击者破解的难度。在登录逻辑中,统一登录错误提示信息也至关重要。如果提示信息区分账号不存在和密码错误,攻击者就能通过不断尝试用户名,获取到有效的账号信息。例如:

function login() {

var username = document.getElementById('username').value;

var password = document.getElementById('password').value;

fetch('/login', {

method: 'POST',

headers: {

'Content-Type': 'application/json'

},

body: JSON.stringify({username: username, password: password})

})

.then(response => response.json())

.then(data =&g
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值