什么是CSRF跨站伪造请求:
用户登录安全网站A成功后,然后在没有退出登录的情况下,又登录了不安全网站B,点击一些链接,因为是用的同一浏览器,
不安全网站B可以通过浏览器伪装成该用户身份向网站A发出请求做一些非法操作(隐藏在链接里面)。
网站A:
@app.route('/transfer', methods=["POST", "GET"])
def transfer():
# 从cookie中取到用户名
username = request.cookies.get('username', None)
# 如果没有取到,代表没有登录
if not username:
return redirect(url_for('index'))
if request.method == "POST":
to_account = request.form.get("to_account")
money = request.form.get("money")
return '转账 %s 元到 %s 成功' % (money, to_account)
return render_template('temp_transfer.html')
网站A需要获取to_account和money这两个值就能转账。
网站B
@app.route('/')
def index():
return render_template('temp_index.html')
<h1 style="background: red">网站B</h1>
<form method="post" action="http://127.0.0.1:9000/transfer">
<input type="" name="to_account" value="999999">
<input type="" name="money" value="190000">
<input type="submit" value="点击领取优惠券">
</form>
网站B里面直接写好了to_account和money这两个值分别是999999,190000,和提供了网站A的网址和转账接口。但这些都是隐藏的,用户只能看到点击领取优惠券,当点击后,会自动跳转到上面的网址和转账接口,并且把999999,190000都填到对应位置。因为是通过你的浏览器访问,对于同一台电脑,同一浏览器的第二次访问,会自带上次访问的cookie,网站A会认为是安全访问,而识别不到是第三方的攻击请求,从而通过访问。