Web安全之浅见

备注:这是我在2017年在自己的网站上写的文章,今天迁移过来。

        昨天去参加了公司组织的一个关于网络安全的培训,了解了很多关于网络安全方面的知识,也才意识到网络安全是一项极其重要的领域。

        本篇文章主要聊聊Web安全。不过我对于网络安全方面不是特别懂,所以网络安全方面的大牛们,可以忽略我的文章哈。

本文主要讲以下几种:

  1. DDos攻击
  2. XSS;
  3. CSRF;
  4. SQL注入;

一、Ddos攻击

  DDos攻击,它的原理主要是利用触发大量的协议上允许的请求,从而让你的服务器资源耗尽,比如SYN_FLOOD,DNS_FLOOD,还有HTTP连接的慢连接,CC等等。

        SYN_FLOOD, syn 洪攻击,攻击者伪造客户端不断向服务器发送建立TCP连接请求,但发送完SYNC标志位建立请求之后,不继续后续流程。服务器会不断回复ACK,导致服务器端出现了大量了半开连接,如果数量巨大,导致服务器可能无法再继续正常处理请求。

        洪攻击的缓解方式有多种。如果客户端ip不变,就比较简单了;如果是伪造的,则比较麻烦了。可以增加服务器内部半连接队列大小,可以定期删除半连接队列中最早的SYN。也可以在服务器之前设立一道墙,比如Cloudflare 。对于初始的SYN请求,不直接到达服务器,而是由Cloudflare 完成,

        DNS_FLOOD,dns 洪攻击,这个是对DNS服务器的攻击,DNS服务器用来进行域名解析的,DNS攻击就会向DNS服务器发送大量的请求,导致DNS服务器无法正常进行域名解析。或者就算服务器本身可承受,但由于大量请求过来,可能导致服务器所在的网络运营商发现了流量异常超标,已经影响了整个出口带宽,运营商都会直接把你ip封掉。

        不知道大家是否听说过2009年的暴风影音事件,因为两家游戏公司恶意竞争,一个公司恶意攻击另外一家公司网站,导致DnsPod服务器受到Ddos攻击,再加上当时著名的暴风影音使用了免费的DnsPod服务器,也受到了影响,那时的暴风今非昔比,用户量巨大,导致大量域名解析请求达到了电信的DNS服务器,占用了典型机房的1/3的带宽,于是乎,被电信封掉了ip。这一封不要紧,直接导致使用DnsPod解析的网站全部无法访问,数量达到10万+。有感兴趣的可以看看历史回顾,很精彩,DnsPod创始人很厉害,叫吴洪声,作为一个大专生,靠着爱好和坚持搭建了DnsPod,现在已经被腾讯收购了,妥妥的人生赢家。

        CC攻击,这个就比较隐蔽了,他是模拟正常用户发送大量请求,一直到该网站的服务器资源被耗尽,系统发生宕机。因为其请求是有效的,是模拟正常用户请求的,而且利用代理服务器会使得请求Ip,请求头信息不断改变,所以防范起来不是特别容易。

        解决CC首先要识别CC。识别CC的手段包括:

       1、异常流量监测

         如果监测到我们系统的流量突增,大到远远超过我们正常的流量水平,就要怀疑遇到了CC攻击。

      2、服务器资源监控

         实际上这个和第一个是同步的,如果服务器资源,包括CPU,内存,硬盘都突然间占满,也要怀疑CC的攻击。

     3 、接口相应异常率

       就算是模拟请求,可能还是不会正常返回业务响应码,我们完全可以监控我们的响应code(可能不是响应头的响应码)的错误率,如果非常高,那也说明我们可能遭到了CC攻击。这个我们可以通过本地日志统计或者公司的监控平台来看,我们埋点时也基本上都会统计成功率,耗时等信息的。

   解决手段:

      1、拒绝代理访问

         CC攻击基本上都是使用代理服务器的,我们完全可以限制所有代理服务器的访问,不过有可能误伤。

      2、IP黑名单

     可以对某些网段,某些IP设置黑名单,但感觉作用有限。

     3、限流

       没办法,限流会保证系统不崩,但可能会导致正常请求也被限流住了。

其他的防御手段可能还有增加CDN、增加防火墙、限制连接数、负载均衡、增加带宽等等。

        

二、XSS

1、原理

XSS全名是Cross Site Script,正因为叫XSS,是为了避免和前端的CSS重复。它的原理是攻击者通过向某界面插入一些恶意的脚本,使得在别人访问该页面j加载html的时候会自动执行恶意脚本,从而达到某种目的,比如窃取你的cookie啊,这是最致命的了。

我就结合我的网站来说,我现在要编辑一篇文章,然后我在正文中插入一个简单的脚本代码,如图:

当我编辑完,提交之后,假如我网站没有任何的防御机制,原封不动地将文章数据保存到数据库中。那当有一个用户要访问该文章对应的页面的时候,那这段代码就会被执行。如下:

这个简单的例子就展示了XSS攻击的思想。攻击者完全可以利用网站漏洞,在网站中输入恶意的HTML代码,当用户浏览该网站时,这段代码会被自动执行。可以盗取你的cookie,比如拿到用户的登录token,或者重定向其他网站等等。

2、防御

这里说下在Django中队XSS的防御措施。Django是分成两部分的,一是输入,二是输出。

首先,当你输入完内容要提交的时候,它是要对你的输入字符串进行转义的。

比如你上面输入了script,它会将其转义成:

 <script>alert(&#39海波你真帅!&#39) </script>

嗯,小样,我让你植入,去屎。

当你在执行提交事件时,Django模板会自动进行html转义,下面五个字符转义关系:

  • < 会转换为 &lt;
  • > 会转换为 &gt;
  • ' (单引号) 会转换为 &#39;
  • " (双引号)会转换为 &quot;
  • & 会转换为 &amp;

说完输入,再说输出。输出时Django默认对你加载的变量进行转义。

        但说实话,有的时候我们是不需要转义,比如我的content内容本身就是富文本,在数据库中也是html啊,有各种html标签。因此这时候可以关闭自动转义。

        关闭自动转移可以通过autoescape或者safe, safe是针对独立变量的,autoescape是针对整个代码块的。

{% autoescape off %}Hello {{ name }}Hello {{ name|escape }}
{% endautoescape %}

        注意到没有,我有一个加了escape,这是说虽然对整个子模块关闭转义,但我还想对某个变量进行转义,那就用escape。

三、CSRF

我之前在我的网站中有介绍,感兴趣的可以访问: Django的CSRF介绍。

四、SQL注入

1、原理

        SQL注入攻击的原理就是通过在Web表单中提交一些特殊的字符串,然后让服务器的数据库运行一些SQL语句,从而达到攻击的目的。比如获取用户信息,删除数据库数据等等。你想想,如果银行数据被获取或者篡改或者获取,是多么危险的一件事。

现在拿查询来说,一个标准的查询语句如下:

select username from auth_user where username = 'somename'

假如现在,用户在表单中输入了:' or '1'='1',那sql语句就变成:

select username from auth_user where username = '’ or '1'='1'

该语句的where恒为真,所以会获得所有用户的信息,之前据说CSDN就被爆出几百万用户信息泄露。

上面仅仅是查询,那要是delete或update就危险了,delete from where ......,我把数据都删了。

2、防御

        其实现在Web对sql注入的防御已经比较完善了。就拿Django框架来说,它的保护机制还是非常给力的。

       首先,Django提供了完备的表单验证机制。

        对每一个你输入的字段数据,都会进行各种验证。比如用户名,你还有单引号类似的特殊字符是肯定会抛出异常的。只有你的数据都是有效的,才会执行后续的数据操作。关于更多表单字段验证的可参考我另一篇文章: Django表单验证。

        其次,Django的ORM框架使得会对Django会根据你所使用的数据库服务器的转换规则,自动转义特殊的SQL参数。在《Django Book 2》中有说明:

foo.get_list(bar__exact="' OR 1=1")Django会自动进行转义,得到如下表达:SELECT * FROM foos WHERE bar = '\' OR 1=1'

    (2023年补充内容),我们Java开发者,会经常使用Mybatis,Mybatis通过预编译也已经帮我们避免sql问题的发生,但前提是你要按照规范来开发,字段值要使用 “#{ }”。

以上只是简单的介绍,离深入研究网络安全、系统安全还远着呢。系统安全还要包括数据安全和应用安全,数据安全还包括日志脱敏、数据存储、传输加解密;应用安全包括接口鉴权、  漏洞检查等等各个方面。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/261575.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链游戏解说:什么是 Planet IX

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Planet IX Dashboard 什么是 Planet IX Planet IX&#xff0c;一个由原生 IX TOKEN 推动的 Web3 玩赚平台。作为一款 GameFi 策略游戏&#xff0c; Planet IX 上的每项资…

ArcgisForJS如何访问Arcgis Server?

文章目录 0.引言1.准备ArcGIS相关工具2.创建含有ArcSDE地理数据库的MXD文件3.注册ArcSDE地理数据库4.发布数据到Arcgis Server5.ArcgisForJS访问ArcGIS Server数据 0.引言 ArcGIS API for JavaScript 是一个用于在Web和移动应用程序中创建交互式地图和地理空间分析应用的库。它…

Prometheus+TDengine集群实现监控体系高可用

背景 为避免再次出现因Prometheus宕机导致业务无法查看历史数据受到影响&#xff0c;准备将Prometheus架构从单节点方式升级为高可用集群方式并将后端存储由本地存储改为远端分布式时序数据库存储。分布式时序数据库采用国产数据库TDengine。 架构 解释&#xff1a;虚线代表P…

【服务器】服务器推荐

一、引言 在数字世界的浪潮中&#xff0c;服务器作为数据存储和处理的基石&#xff0c;其重要性不言而喻。而在这个繁星点点的市场中&#xff0c;雨云以其独特的优势和超高的性价比&#xff0c;逐渐成为众多企业和个人的首选。今天&#xff0c;就让我带你走进雨云的世界&#…

排序前言冒泡排序

目录 排序应用 常见的排序算法 BubbleSort冒泡排序 整体思路 图解分析 ​ 代码实现 每趟 写法1 写法2 代码NO1 代码NO2优化 时间复杂度 排序概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递…

QY-800S土壤水分测量仪的使用场景和功能作用

技术参数 ◆土壤湿度 测量范围&#xff1a;干土&#xff5e;饱和土 测量精度&#xff1a;3% 分辨率&#xff1a;0.1% ◆土壤温度 测量范围&#xff1a;-30℃&#xff5e;70℃ 测量精度&#xff1a;0.3℃ 分辨率&#xff1a;0.1℃ ◆记录间隔&#xff1a;30 分&#xff5…

数据分析(二)自动生成分析报告

1. 报告生成思路概述 怎么快速一份简单的数据分析报告&#xff0c;注意这个报告的特点&#xff1a; --网页版&#xff0c;可以支持在线观看或者分享HTML文件 --标题&#xff0c;动图&#xff0c;原始数据应有尽有 --支持交互&#xff0c;比如plotly交互画面&#xff0c;数据…

数论之约数(试除法求约数,约数个数,约数和)算法原理讲解及其实现

约数问题&#xff1a; 试除法&#xff1a; d|n 那么 n/d|n 也是成立的-----> 成对出现的 d<n/d d小于等于根号n 举例&#xff1a; 假如2是12的约数&#xff0c;那么6也是12的约数。 #include <iostream> #include <algorithm> #include <vector> #…

交换瓶子【第七届】【省赛】【A组】

题目描述 有N个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起2个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#xff0c;显然&#…

IDEA-常用插件

1、Mybatis Log Free 当我们使用mybatis log在控制台输出sql 内容&#xff0c;输出内容将语句与参数分开打印&#xff0c;还需要手动将参数替换到指定位置。 使用对应插件后&#xff0c;自动将输出内容组装成完整的可直接执行的SQL 在插件市场 查看对应名称&#xff0c;并安装。…

Android进阶(二十九) 走近 IntentFilter

文章目录 一、什么是IntentFilter &#xff1f;二、IntentFilter 如何过滤隐式意图&#xff1f;2.1 动作测试2.2 类别测试2.3 数据测试 一、什么是IntentFilter &#xff1f; 如果一个 Intent 请求在一片数据上执行一个动作&#xff0c; Android 如何知道哪个应用程序&#xf…

玩转网络抓包利器:Wireshark常用协议分析讲解

Wireshark是一个开源的网络协议分析工具&#xff0c;它能够捕获和分析网络数据包&#xff0c;并以用户友好的方式呈现这些数据包的内容。Wireshark 被广泛应用于网络故障排查、安全审计、教育及软件开发等领域。关于该工具的安装请参考之前的文章&#xff1a;地址 &#xff0c;…

K210基础实验——点亮LED灯

一、目的是点亮K210开发板左下角的LED0和LED1&#xff0c;LED0是红灯&#xff0c;LED1是绿灯&#xff0c;两颗LED灯都是低电平点亮&#xff0c;高电平熄灭。 二、这是原理图上的硬件连接&#xff0c;LED0连接的是IO0&#xff0c;LED1连接的是IO17。 三、在src目录下新建文件夹 …

Java SE 入门到精通—基础语法【Java】

敲重点&#xff01; 本篇讲述了比较重要的基础&#xff0c;是必须要掌握的 1.程序入口 在Java中&#xff0c;main方法是程序的入口点&#xff0c;是JVM&#xff08;Java虚拟机&#xff09;执行Java应用程序的起始点。 main方法的方法签名必须遵循下面规范&#xff1a; publ…

js 多对象去重(多属性去重)

需求中发现后端可能没有处理重复数据&#xff0c;这个时候前段可以直接解决。 在 JavaScript 中&#xff0c;可以使用 Set 数据结构来进行多对象的去重。Set 是 ES6 新引入的集合类型&#xff0c;其特点是元素不会重复且无序。 下面是一个示例代码&#xff0c;展示如何通过 S…

js设计模式:计算属性模式

作用: 将对象中的某些值与其他值进行关联,根据其他值来计算该值的结果 vue中的计算属性就是很经典的例子 示例: let nowDate 2023const wjtInfo {brithDate:1995,get age(){return nowDate-this.brithDate}}console.log(wjtInfo.age,wjt年龄)nowDate 1console.log(wjtInf…

stm32——hal库学习笔记(DAC)

这里写目录标题 一、DAC简介&#xff08;了解&#xff09;1.1&#xff0c;什么是DAC&#xff1f;1.2&#xff0c;DAC的特性参数1.3&#xff0c;STM32各系列DAC的主要特性 二、DAC工作原理&#xff08;掌握&#xff09;2.1&#xff0c;DAC框图简介&#xff08;F1&#xff09;2.2…

OJ链接——打印从1到最大的n位数

目录 1. 题目描述2. 示例3. 分析思路4. 完整代码 1. 题目描述 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 链接在…

服务老是被攻击?

什么防重放攻击&#xff0c;请求体篡改&#xff0c;越权攻击&#xff0c;都整上来了&#xff0c;好嘛&#xff0c;我都不清楚这个项目这半年是怎么度过的。 不知道大家公司对接口安全这块是怎么考量的&#xff0c;但是对于面向公网提供服务的产品来说&#xff0c;这个可以说是很…

贝叶斯统计——入门级笔记

绪论 1.1 引言 全概率公式 贝叶斯公式 三种信息 总体信息 当把样本视为随机变量时&#xff0c;它有概率分布&#xff0c;称为总体分布&#xff0e; 如果我们已经知道总体的分布形式这就给了我们一种信息&#xff0c;称为总体信息 样本信息 从总体中抽取的样本所提供的信息 先…