zoukankan      html  css  js  c++  java
  • Django之XSS攻击

    Django之XSS攻击

      XSS是什么:XSS是跨站脚本攻击。

      XSS可以获取用户的信息,比如登录凭证Cookie,那样就可以登录用户的账号,但是在django中,XSS 是默认阻止的。因为在django中,a标签是字符串类型的。

      比如在评论中提叫script的代码,会以字符串的形式显示出来。

      views.py

    msg = []
    
    def comment(request):
        if request.method =="GET":
            return render(request,"comment.html")
        else:
            v = request.POST.get("content")
            msg.append(v)
            return render(request,"comment.html")
    
    def index(request):
        return render(request,"index.html",{"msg":msg})

      comment.html

    <body>
        <form action="/comment/" method="post">
            <input type="text" name="content">
            <input type="submit" value="submit">
        </form>
    </body>
    </html>

      index.html

    <body>
    
        <h1>评论</h1>
        {% for foo in msg %}
            <div>{{ foo }}</div>
        {% endfor %}
    
    </body>
    </html>

    结果:

      但XSS也是可以生效的,那就是使其这个提交的评论是safe的。

      index.html

    <body>
        <h1>评论</h1>
        {% for foo in msg %}
            <div>{{ foo|safe }}</div>
        {% endfor %}
    
    </body>
    </html>

      这样的话,只要在前端提交一个script的代码,那么基本上每次访问index页面都会有alert提示。

     

       这样的话,那个script会以代码的形式注入到页面中,并运行。

      但是如何不写safe,也可以阻止XSS,也既是要在提交的数据中进行筛选。

      views.py

    msg = []
    
    def comment(request):
        if request.method =="GET":
            return render(request,"comment.html")
        else:
            v = request.POST.get("content")
            if "script" in v:
                return render(request,"comment",{"error":"禁止XSS注入,存在安全隐患"})
            else:
                msg.append(v)
                return render(request,"comment.html")

     comment.html

    <body>
    <form action="/comment/" method="post"> <input type="text" name="content"> <input type="submit" value="submit">{{ error }} </form>
    </body>

     导入from django.utils.safestring import mark_safe  也是可以的

      用mark_safe也是可以阻止的。

      总结:

        阻止XSS的两种方式:

            一、在前端模板里标记safe

            二、在后端代码中使用模块的方法mark_safe

    ------------ END -----------

  • 相关阅读:
    等额本息计算公式推导
    使用Charles抓取APP之HTTPS请求
    服务端如何安全获取客户端请求IP地址
    HTTPS到底是个什么鬼?
    了解数字证书、数字签名与常见的加密算法
    centos下如何使用sendmail发送邮件
    Android Studio快捷键——编辑篇
    Universal-Image-Loader源码分析(二)——载入图片的过程分析
    Universal-Image-Loader源码分析(一)——ImageLoaderConfiguration分析
    Volley源码分析(五)Volley源码总结篇
  • 原文地址:https://www.cnblogs.com/george92/p/11307485.html
Copyright © 2011-2022 走看看