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


    
"/comment/" method="post"> "text" name="content"> "submit" value="submit">

 

  index.html



    

评论

{% for foo in msg %}
{{ foo }}
{% endfor %}

 

结果:

Django之XSS攻击_第1张图片

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

  index.html


    

评论

{% for foo in msg %}
{{ foo|safe }}
{% endfor %}

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

 

 

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

Django之XSS攻击_第2张图片

  但是如何不写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


"/comment/" method="post"> "text" name="content"> "submit" value="submit">{{ error }}

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

Django之XSS攻击_第3张图片

  用mark_safe也是可以阻止的。

 

  总结:

    阻止XSS的两种方式:

        一、在前端模板里标记safe

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

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

 

转载于:https://www.cnblogs.com/george92/p/11307485.html

你可能感兴趣的:(Django之XSS攻击)