zoukankan      html  css  js  c++  java
  • Django中的CSRF(跨站请求伪造)

    Django中的CSRF(跨站请求伪造)

    什么是CSFR

    即跨站请求伪装,就是通常所说的钓鱼网站。
    钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的?)
    钓鱼网站的页面是由 钓鱼网站的服务端给你返回的

    正经网站的网页是由 正经网站的服务端给你返回的

    CSFR示例

    模拟钓鱼网站中的转账操作
    通常用户在正规网站进行转账操作,网页页面由正规网站服务端提供,数据返回到正规网站的服务端,而钓鱼网站页面与正规网站页面无异,但是会将用户输入的数据进行修改后返回到正规网站的服务端

    正规网站的页面代码

    <form action="/transfer/" method="post">
        <p>
            转账人:
            <input type="text" name="from">
        </p>
    
        <p>
            收款人:
            <inputtype="text"name="to">
        </p>
    
        <p>
            金额:
            <input type="text" name="money">
        </p>
    
        <p>
            <input type="submit" value="转账">
        </p>
    </form>
    

    注意: 正规网站的 form 表单中的action自然是返回给自己

    钓鱼网站的页面代码

    1. <formaction="http://127.0.0.1:8000/transfer/"method="post"> 
    2. <p> 
    3. 转账人: 
    4. <input type="text" name="from"> 
    5. </p> 
    6.  
    7. <p> 
    8. 收款人: 
    9. <inputtype="text"name=""> 
    10. <inputtype="text"name="to"value="bad_guy"style="display: none"> 
    11. </p> 
    12.  
    13. <p> 
    14. 金额: 
    15. <input type="text" name="money"> 
    16. </p> 
    17.  
    18. <p> 
    19. <input type="submit" value="转账"> 
    20. </p> 
    21. </form> 

    注意:

    1. 在钓鱼网站的 form 表单中将 action 设置的是正规网站的链接地址。
    2. 代码的第 9 10 行是关键所在,通过设置一个不可见的 input 标签来更改返回到正规网站服务端的数据。

    Django 的应对措施

    Django中内置了一个专门处理csrf问题的中间件

    django.middleware.csrf.CsrfViewMiddleware

    使用方式

    在页面上 form 表单里面写上

    {% csrf_token %}

    例如:

    <form action="/transfer/" method="post">
        {% csrf_token %}
        <p>
            转账人:
            <input type="text" name="from">
        </p>
    
        <p>
            收款人:
            <input type="text" name="to">
        </p>
    
        <p>
            金额:
            <input type="text" name="money">
        </p>
    
        <p>
            <input type="submit" value="转账">
        </p>
    </form>
    

    这个中间件做的事情:

    1. 在render返回页面的时候,在页面中塞了一个隐藏的input标签
    2. 当提交POST数据的时候,它帮你做校验,如果校验不通过就拒绝这次请求

     

    csfr添加的隐藏的 input 标签
    csfr添加的隐藏的 input 标签

     

  • 相关阅读:
    给VPS装桌面
    GIT免密码PUSH
    验证码类
    Url几个常用的函数
    PHP--关于模板的原理和解析
    管理员权限执行批处理和静默执行regsvr32注册
    linux 维护常见场景小命令 (未完待续)
    批处理定时重启print打印服务,解决打印机异常队列堆积
    Linux----LVM扩容磁盘空间
    6、Samba 服务器配置
  • 原文地址:https://www.cnblogs.com/banshaohuan/p/9456114.html
Copyright © 2011-2022 走看看