Python中的CSRF攻击与加密技术

2023-04-17 00:00:00 python 攻击 加密技术

CSRF攻击(Cross-Site Request Forgery)是一种常见的Web安全漏洞,攻击者利用用户已登录的身份,在用户不知情的情况下,通过伪造有效的请求信息来执行恶意操作。

以下是一些防范CSRF攻击的技术:

  1. 验证码(CAPTCHA):在关键操作前要求用户输入验证码,以验证用户操作的合法性。

  2. Token验证:在页面中生成随机的Token,并在表单中添加Token,服务端收到请求后验证Token的合法性,从而防止CSRF攻击。

  3. 同源检测:在服务端根据请求的Referer信息判断请求来源是否合法。

  4. 设置Cookie属性:设置Cookie的SameSite属性为Lax或Strict,表示Cookie只能在当前站点访问,从而保护用户数据。

下面是一个示例代码,模拟了一个简单的登录页面和提交评论的功能,使用Token验证来防止CSRF攻击:

from flask import Flask, request, render_template, make_response
import secrets

app = Flask(__name__)

# 生成随机Token
def gen_token():
    return secrets.token_hex(16)

# 登录页面
@app.route('/')
def login():
    # 生成Token
    token = gen_token()
    # 将Token存储在Cookie中
    resp = make_response(render_template('login.html', token=token))
    resp.set_cookie('csrf_token', token)
    return resp

# 提交评论
@app.route('/comment', methods=['POST'])
def comment():
    # 获取表单数据和Token
    comment = request.form['comment']
    token = request.form['csrf_token']
    # 检查Token是否合法
    if token == request.cookies.get('csrf_token'):
        # Token合法,处理评论逻辑
        return '评论成功:{}'.format(comment)
    else:
        # Token不合法,返回错误提示
        return 'CSRF攻击!'

if __name__ == '__main__':
    app.run()

在登录页面中生成随机Token,并将Token存储在Cookie中。当提交评论时,服务端会检查请求中的Token和Cookie中的Token是否一致,从而防止CSRF攻击。

相关文章