<强> CSRF 强>
<代码> CSRF 代码>全拼为<代码>跨站请求伪造> 代码,译为跨站请求伪造。
<代码> CSRF> 代码指攻击者盗用了你的身份,以你的名义发送恶意请求。
包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…
造成的问题:一个人隐私泄露以及财产安全。
CSRF攻击示意图
客户端访问服务器时没有同服务器做安全验证
防止CSRF
1。在客户端向后端请求界面数据的时候,后端会往响应中的cookie中设置csrf_token的值
2。在形式表单中添加一个隐藏的的字段,值也是csrf_token
3。在用户点击提交的时候,会带上这两个值向后台发起请求
4。后端接受到请求,以会以下几件事件:& # 8226;从cookie中取出csrf_token
-
<李>从表单数据中取出来隐藏的csrf_token的值李>
<李>进行对比李>
5。如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作
<强>代码演示强>
<强>未进行csrf校验的WebA 强>
后端代码实现
从进口瓶瓶,render_template make_response 从瓶进口重定向 从瓶进口请求 从瓶进口url_for 应用=瓶(__name__) @app。路线(“/薄⒎椒? [“POST”、“获得”]) def指数(): 如果请求。方法==癙OST”: #取到表单中提交上来的参数 用户名=request.form.get(“用户”) 密码=request.form.get(“密码”) 如果不是全部((用户名、密码)): 打印(“参数错误”) 其他: 打印(用户名、密码) 如果用户名====袄贤酢焙兔苈搿?234”: #状态保持,设置用户名到cookie中表示登录成功 响应=重定向(url_for(“转让”)) 响应。set_cookie(用户名,用户名) 返回响应 其他: 打印(“密码错误”) 返回render_template (“temp_login.html”) @app。路线('/转让”、方法=[“POST”、“获得”]) def转移(): #从cookie中取到用户名 用户名=request.cookies。(“用户名”,没有一个) #如果没有取到,代表没有登录 如果没有用户名: 返回重定向(url_for(指数)) 如果请求。方法==癙OST”: to_account=request.form.get (“to_account”) 金钱=request.form.get(“钱”) 打印(“假装执行转操作,将当前登录用户的钱转账到指定账户”) 返回“转账% s元到% s成功的%(钱,to_account) #渲染转换页面 响应=make_response (render_template (temp_transfer.html)) 返回响应 if __name__==癬_main__”: app.run (debug=True,端口=9000)
前端登录页面代码
& lt; !DOCTYPE html> & lt; html lang=癳n”比; & lt; head> & lt;元charset=皍tf - 8”比; & lt; title>登录& lt;/title> & lt;/head> & lt; body> & lt; h2>我是网站,登录页面& lt;/h2> & lt;形式方法=皃ost”比; & lt; label>用户名:& lt;/label> & lt;输入type="文本" name="用户名"占位符=扒胧淙胗没白4? lt; br/比; & lt; label>密码:& lt;/label> & lt;输入type="密码" name="密码"占位符=扒胧淙朊苈搿弊4? lt; br/比; & lt;输入类型="提交" value=" https://www.yisu.com/zixun/登录”比; & lt;/form> & lt;/body> & lt;/html>
前端转账页面代码
& lt; !DOCTYPE html> & lt; html lang=癳n”比; & lt; head> & lt;元charset=皍tf - 8”比; & lt; title>转账& lt;/title> & lt;/head> & lt; body> & lt; h2>我是网站,转账页面& lt;/h2> & lt;形式方法=皃ost”比; & lt; label>账户:& lt;/label> & lt;输入类型=拔谋尽钡拿?皌o_account”占位符=扒胧淙胍说恼嘶А弊4? lt; br/比; & lt; label>金额:& lt;/label> & lt;输入类型=笆帧钡拿?扒闭嘉环?扒胧淙胱私鸲睢弊4? lt; br/比; & lt;输入类型="提交" value=" https://www.yisu.com/zixun/转账”比; & lt;/form> & lt;/body> & lt;/html>瓶模拟实现CSRF攻击的方法