csrf服务端漏洞 单次请求怎么用token控制
时间: 2023-10-31 16:04:52 浏览: 157
CSRF(Cross-site request forgery)攻击是一种常见的Web安全漏洞,它利用受害者已经登录的身份在不知情的情况下发送恶意请求。为了防止这种攻击,我们可以在后端验证请求是否合法,而Token是一种常见的验证机制。
在单次请求中,可以通过在请求头中添加Token来控制请求的合法性。具体的步骤如下:
1. 在后端生成一个Token,并将其存储在Session或者Cookie中。
2. 在前端发起请求时,将Token添加到请求头中。
3. 后端在接收到请求后,验证Token是否合法。如果Token不合法,则返回错误信息;如果Token合法,则继续处理请求。
以下是一个示例代码:
后端生成Token并存储在Session中:
```
import random
import string
from flask import Flask, session
app = Flask(__name__)
app.secret_key = 'your_secret_key'
def generate_token():
token = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
session['token'] = token
return token
```
前端发起请求时,在请求头中添加Token:
```
import requests
url = 'http://example.com/api'
headers = {'X-CSRFToken': 'your_token'}
response = requests.post(url, headers=headers)
```
后端验证Token是否合法:
```
from flask import request, abort
@app.before_request
def csrf_protect():
if request.method == 'POST':
token = session.pop('token', None)
if not token or token != request.headers.get('X-CSRFToken'):
abort(400, 'Invalid CSRF token')
```
在这个示例代码中,我们在每次请求之前都会验证Token的合法性。如果Token不合法,我们会返回一个400错误。在实际的生产环境中,我们还需要对Token进行定期更新,以增加安全性。
阅读全文