瓶模拟实现CSRF攻击的方法

  

<强> CSRF

  

<代码> 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攻击的方法