以Django为例谈谈XSS和CSRF攻击

前言

在Web安全领域,XSS和CSRF两个是最常见的攻击方式,由于最近在研究Django框架,阅读源码的同时分析下这两个攻击的攻击方式和防御方式

XSS

XSS,即 Cross Site Script,中译是跨站脚本攻击;在别人的站点嵌入脚本,而这个脚本原来不是属于这个站点的,所以叫跨站脚本,其原本缩写是 CSS,但为了和层叠样式表(Cascading Style Sheet)有所区分,因而在安全领域叫做 XSS。

XSS 攻击本质是指攻击者在网站上注入恶意的客户端代码,代码未经过滤,浏览器无法区分,恶意脚本被执行,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。

攻击者对客户端网页注入的恶意脚本一般包括 JavaScript,有时也会包含 HTML 和 Flash。有很多种方式进行 XSS 攻击,但它们的共同点为:将一些隐私数据像 cookie、session 发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操作。

XSS 危害

  • 盗取Cookies,恶意删除文章,篡改嫁祸
  • web 2.0 蠕虫,就是微博的那次XSS蠕虫爆发
  • 蠕虫DDos,刷量,刷广告,破坏数据

XSS攻击可以分为3类:反射型(非持久型)、存储型(持久型)、基于DOM(这个咱们就先不管了,看前两个)。

反射型 (单次反射,无db)

攻击者构造出特殊的URL,其中包含恶意代码,用户打开恶意代码的URL,服务器解析拼接在HTML‘中返回反射给浏览器,脚本执行,窃取信息。

用户通过Web客户端提交给服务端的数据,立刻用于解析和显示该用户的结果页面(数据没有在服务端存储)

这种方式只是简单的把用户输入的数据反射给浏览器,这种攻击方式往往需要攻击者诱导点击链接,或者提交一个表单,Response返回Script脚本代码,从而注入脚本。

Question:肯定有人好奇反射型攻击的恶意链接放在哪里?
1.攻击者可以恶意链接直接发送给受信任用户,比如email,站内私信,评论等
2.攻击者可以购买存在漏洞网站的广告位,将恶意链接插入到广告中

示例
创建一个静态页面,url后面跟上自己的注入脚本,可以写好,可以通过input输入
当用户点击钓鱼网站链接时,服务器处理后由于没有过滤转义,就会直接和HTML一起反射回来

# 路径配置
from django.urls import path, re_path
from . import views

app_name = 'books'

urlpatterns = [
    re_path(r'^cook1/$', views.cook1),

随后页面上回出现恶意链接网站注入的脚本

# view视图处理
def cook1(request):
    # t1 = loader.get_template('books/cook1.html')
    # context = {'h1': 'hello'}
    return render(request, 'books/cook1.html', {
   
   'x': request.GET.get('x')})
# 模板渲染反射
<body>
{
   
   {
   
   x}}
{
   
   #{
   
   { x|safe }}#}
</body>

在这里插入图片描述
浏览器的区别:
针对这种XSS攻击,Chrome和Safari都已经屏蔽了,只能在Firefox中模拟出来

以上就产生了反射性的XSS攻击,攻击者根据注入任意类型的恶意脚本进行攻击,可以恶作剧,也可以注入能获取用户cookies的脚本。

非持久性最典型的就是在URL后面添加恶意脚本如下,简单粗暴,后面介绍应对方案

<script>恶意代码</script>

注意:
XSS非持久型攻击,根据我的理解是不会跳转到攻击者页面的,同源策略,脚本会在本网站进行非法获取或者恶作剧

这里有

RSS攻击图解
在这里插入图片描述

持久型 (永久反射,入库)

攻击者在表单页面发表评论,输入一些文本之后还输入了脚本

<script>alert
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值