十五 .Django 自身安全机制-XSS

一 .django-xss攻击原理与防范

1.跨站脚本攻击(XSS)概念

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。也属一种注入攻击,
注入本质上就是把输入的数据变成可执行的程序语句比如这些代码包括HTML代码和客户端脚本。

 2. 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,那就必须在后台对要渲染的字符串做过滤了。所以在开发的时候,一定要慎用安全机制。尤其是对用户可以提交的并能渲染的内容!!!
comment.html :评论提交页面


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <form method="POST" action="/comment/">
        <h4>评论</h4>
        <input type="text" name="content"/>
        <input type="submit" value="提交" />{{ error }}
    </form>
</body>
</html>
index.html 评论显示页面:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>评论内容</h1>
    {% for item in msg %}
        <div>{{ item|safe }}</div>
    {% endfor %}
</body>
</html>


views.py 后台处理

from django.shortcuts import render
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})
def test(request): from django.utils.safestring import mark_safe temp = "<a href='http://www.baidu.com'>百度</a>" newtemp = mark_safe(temp) return render(request,'test.html',{'temp':newtemp}

 

转载于:https://www.cnblogs.com/lovershowtime/p/11361434.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值