前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django之XSS攻击

Django之XSS攻击

作者头像
超蛋lhy
发布2018-08-31 15:57:02
1.3K0
发布2018-08-31 15:57:02
举报
文章被收录于专栏:PythonistaPythonista

一、什么是XSS攻击

xss攻击:----->web注入

    xss跨站脚本攻击(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。   我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是把输入的数据变成可执行的程序语句。SQL注入是如此,XSS也如此,只不过XSS一般注入的是恶意的脚本代码,这些脚本代码可以用来获取合法用户的数据,如Cookie信息。 PS: 把用户输入的数据以安全的形式显示,那只能是在页面上显示字符串。 django框架中给数据标记安全方式显示(但这种操作是不安全的!):  - 模版页面上对拿到的数据后写上safe. ----> {{XXXX|safe}}  - 在后台导入模块:from django.utils.safestring import mark_safe    把要传给页面的字符串做安全处理 ----> s = mark_safe(s)

二、测试代码

实施XSS攻击需要具备两个条件:
  一、需要向web页面注入恶意代码;
  二、这些恶意代码能够被浏览器成功的执行。
解决办法:

  1、一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤。   2、在后台对从数据库获取的字符串数据进行过滤,判断关键字。   3、设置安全机制。   django框架:内部机制默认阻止了。它会判定传入的字符串是不安全的,就不会渲染而以字符串的形式显示。如果手贱写了safe,那就危险了,若想使用safe,那就必须在后台对要渲染的字符串做过滤了。所以在开发的时候,一定要慎用安全机制。尤其是对用户可以提交的并能渲染的内容!!!

这里是不存在xss漏洞的写法,因为django已经做了防攻击措施

index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>评论</h1>
{% for item in msg %}
{#    <div>{{ item|safe }}</div>#}  #这里被注释的,是因为,|safe 加了这个就认为是安全的了,写入 <script> alert(123)</script>  就会恶意加载
    <div>{{ item}}</div>
{% endfor %}

</body>
</html>

conment.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

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

views.py

代码语言:javascript
复制
from django.shortcuts import render,HttpResponse

# Create your views here.
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})
########################################################

 urls.py

代码语言:javascript
复制
from app01 import  views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^comment/',views.comment),
]

------------------------------------######################_-------------------------------

以下是做了用户输入判断,检测是否有特殊字符

代码语言:javascript
复制
from django.shortcuts import render,HttpResponse

# Create your views here.
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.html",{'error':'小比崽子'})
        else:
            msg.append(v)
            return render(request,'comment.html')
def index(request):
    return render(request,"index.html",{"msg":msg})
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>评论</h1>
{% for item in msg %}
    <div>{{ item|safe }}</div>
{#    <div>{{ item}}</div>#}
{% endfor %}

</body>
</html>
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/comment/" method="POST">
    <input type="text" name="content">
    <input type="submit" value="提交">{{ error }}
</form>
</body>
</html>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是XSS攻击
    • xss攻击:----->web注入
    • 二、测试代码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档