web安全知识点(常见web攻击总结)

目录

  • 一、XSS—跨站脚本攻击
    • 1、原理
    • 2、非持久XSS(反射型XSS)
      • 2.1、特点
      • 2.2、如何防止
    • 3、持久性XSS(存储型XSS)
      • 3.1、条件
      • 3.2、特点
  • 二、CSRF—跨站请求伪造攻击
    • 1、原理
    • 2、条件
    • 3、预防CSRF
  • 三、SQL注入
    • 1、原理
    • 2、预防
  • 四、命令行注入
  • 五、DDOS攻击—分布式拒绝服务攻击
    • 1、原理
    • 2、网络层DDOS
      • 2.1、SYN flood
      • 2.2、ACK flood
      • 2.3、UDP flood
      • 2.4、ICMP flood
      • 2.5、网络层DDOS防御
    • 3、应用层DDOS
      • 3.1、CC攻击
      • 3.2、DNS flood
      • 3.3、HTTP慢速连接攻击
      • 3.4、应用层DDOS防御
    • 4、其他DDOS攻击
  • 六、流量劫持
    • 1、DNS劫持
    • 2、HTTP劫持
  • 七、服务器漏洞
  • 八、多少QPS才是高并发
    • 1、吞吐量(TPS)、QPS、并发数、响应时间(RT)的概念
      • 1)、QPS计算公式
      • 2)、QPS
      • 3)、响应时间(RT)
      • 4)、吞吐量(TPS)
      • 5)、并发用户数
    • 2、高并发的四个角度
    • 3、PV和QPS
    • 4、脱离业务讨论技术都是耍流氓

一、XSS—跨站脚本攻击

跨站脚本攻击(cross site script

1、原理

恶意攻击者往web页面插入恶意可执行网页脚本代码,当用户浏览该页时,嵌入其中web里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其它侵犯用户安全隐私的目的。XSS的攻击方式千变万化,但仍可大致分成几个类型:

2、非持久XSS(反射型XSS)

一般是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被html解析,执行。

2.1、特点

  • 即时性,不经过服务器存储,直接通过HTTPGETPOST请求就能完成一次攻击,拿到用户隐私数据
  • 攻击者需要诱骗点击
  • 反馈率低,所以较难发现和响应修复
  • 盗取用户敏感保密信息

2.2、如何防止

  • web页面渲染的所有内容/数据都必须来自服务端
  • 尽量不要从URLdocument(文档)、referrerdocument.forms这种 DOM API 中获取数据直接渲染
  • 尽量不要使用evalnew function()document.write()window.setInterval()innerhtmldocument.setTimeout()document.createElement()等执行字符串的方法
  • 如果做不到以上几点,也必须对设计DOM渲染的方法传入的字符串参数做 escope转义
  • 前端渲染的时候对任何的字段都需要做 escope转义代码

3、持久性XSS(存储型XSS)

一般存在于form表单提交等交互操作,如发帖留言、提交文本信息等。黑客利用XSS漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰将其渲染执行。

3.1、条件

此攻击成功需同时满足以下条件:

  • POST请求提交表单后端没做转义直接入库
  • 后端从数据库中取出数据没做转义直接输出前端
  • 前端拿到后端数据没做转义直接渲染成DOM

3.2、特点

  • 持久性久,植入在数据库中
  • 危害面广,甚至可以让用户机器变成DDOS攻击的肉鸡
  • 盗取用户私密信息
  • 基于字符集的XSS
  • 基于Flash 的跨站XSS
  • 未经验证的跳转XSS

二、CSRF—跨站请求伪造攻击

跨站请求伪造攻击(cross-site request forgery

1、原理

攻击者盗用了你的身份,以你的名义发送恶意请求。
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。
造成个人隐私泄露以及财产安全问题

可以理解为有一个小偷在你配钥匙的地方得到了你家的钥匙,然后拿着去你家想偷什么偷什么。

2、条件

完成CSRF攻击必须有三种条件:

  • 用户以及登陆了站点A,并在本地记录了cookie
  • 用户在没有登出站点A的情况下(也就是cookie生效的情况下),访问了恶意攻击者提供的引诱危险站点BB要求访问A)——(B也可能为一个存在其他漏洞的可信任网站)
  • 站点A没有做任何CSRF防御

3、预防CSRF

  • 正确使用GETPOSTcookie
  • 在非GET请求中增加token
    当正确使用GET和POST后,剩下的就剩在所有非GET请求中国增加随机数
  • 验证码 token

三、SQL注入

1、原理

攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。
举例: ' OR '1' = '1'
这是最常见的SQL注入攻击,当我们输入如用户名admin,然后密码输入 ' OR '1'='1' 的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是 select * from user where username=' ' and password=' ' ,经过参数拼接后,会执行SQL语句 select * from user where username=' ' and password=' ' OR '1'='1' ,这个时候 1=1是成立,自然就跳过验证了。

但是如果在严重一点,密码输入的是 ;DROP TABLE user;-- ,那么SQL命令为 select * from user where username=' ' and password=' ' ;drop table user;-- ,这个时候我们就把这个表给删除了。

牛逼的SQL注入高手甚至可以通过SQL查询去运行主机系统级命令。

2、预防

防止SQL注入主要是不能允许用户输入的内容影响正常的SQL语句逻辑,用户输入的任何内容都必须进行转义过滤,当然仅做到这个是不够的:

  • 严格限制web应用的数据库的操作权限,满足工作即可,最大化减少注入攻击对数据库的危害
  • 后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如正则匹配
  • 对进入数据库的热水字符进行转义或编码转换
  • 所有的查询语句建议使用数据库提供的参数化查询接口
  • 在应用发布之前建议使用专业的SQL注意检测工具进行检测。 sqlmapSQLninja
  • 避免网站打印出SQL错误信息
  • 不要过于细致返回错误信息

碰到要操作数据库的代码,一定要慎重,小心使得万年船,多找你个人来多次 code review,善于利用检测工具。

四、命令行注入

通过HTTP请求直接侵入主机,执行攻击者预设的shell命令。

注:无论何种后端语言,凡是涉及到代码调用系统shell命令一定要慎重。

五、DDOS攻击—分布式拒绝服务攻击

分布式拒绝服务攻击(Distributed Denial Of Service

1、原理

其原理就是利用大量的请求造成资源过载,导致服务不可用,这个攻击应该不能算安全问题,这种攻击根本就是耍流氓,伤敌一千,自损八百的行为。

简单来说就是发送大量请求使服务器瘫痪。DDOS攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDoS,攻击者借助公共网络,将大量的计算机设备联合起来,向一个或多个目标进行攻击。

DDOS攻击可以理解为:你开了一家店,隔壁家店看不惯,就雇了一大堆黑涩会人员进你店里干坐着,也不消费,其他客人也进不来,导致你营业惨淡。为啥说DDoS是个伤敌一千,自损八百的行为呢?毕竟隔壁店也花了不少钱雇黑涩会不是。DDoS攻击的目的基本上就以下几个:

  • 深仇大恨,就是要干死你
  • 敲诈你,不给钱就干你
  • 忽悠你,不买我防火墙就有 “人” 干你

也许你的站点遭受过DDoS攻击,具体什么原因怎么解读见仁见智。DDoS从层次上可分为网络层和应用层攻击。从攻击手法上可分为 快型流量攻击 与 慢型流量攻击,但其原理都是造成资源过载,导致服务不可用。

2、网络层DDOS

网络层DDoS攻击包括 SYN FloodACK FloodUDP FloodICMP Flood

2.1、SYN flood

SYN Flood攻击主要利用了TCP三次握手过程中的bug,我们都知道TCP三次握手过程中是要建立连接的双方发生 SYNSYN+ACKACK 数据包,而当攻击方随意构造源IP发送SYN包时,服务器返回的SYN+ACK 就不能得到应答(因为IP是随意构造的),此时服务器就会常识重新发送,并且会有至少30s的等待时间,导致资源饱和服务不可用,此攻击属于慢性DDOS攻击。

2.2、ACK flood

ACK Flood 攻击是建立在TCP连接之后,所有的数据传输TCP报文都是带有ACK标志位的,主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告知此端口不存在。

连接四原组:源IP地址、目的IP地址、源端口、目的端口

这里服务器要做两个动作: 查表,回应ACK/RST。小包大流量攻击。

ApacheIIS 来说,lokbpsACK Flood 不构成威胁。

2.3、UDP flood

UDP Flood攻击是由于UDP是一种无连接的协议,因此攻击者可以仿造大量的源IP地址去发送UDP包,此种攻击属于大流量攻击。
正常应用情况下,UDP包双休流量会基本相等,因此发起这种攻击的攻击者在消耗对方资源的同时,也在消耗自己的资源。

2.4、ICMP flood

大流量攻击,防火墙可屏蔽ICMP包,已落伍。

2.5、网络层DDOS防御

究其本质无法防御,优化服务器部署,提升网络带宽。

  • 网络架构上做好优化,采用负载均衡分流
  • 确保服务器的系统文件是最新版本,并及时更新系统补丁
  • 添加抗DDoS设备,进行流量清洗
  • 限制同时打开的SYN半连接数目,缩短SYN半连接的 timeout时间
  • 限制单IP请求频率
  • 防火墙等防护设置禁止ICMP包等
  • 运行端口映射程序或端口扫描程序,要认真检查特权端口和半特权端口
  • 关闭不必要的服务
  • 认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭了攻击
  • 限制在防火墙外与网站文件共享,这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会
  • 加钱堆机器
  • 报警

3、应用层DDOS

应用层DDoS攻击一般发生在TCP建立握手成功后,应用程序处理请求的时候,现在很多常见的DDoS攻击都是应用层攻击,应用层攻击千变万化,目的就是在网络应用层耗尽你的带宽,下面列出几种典型的攻击类型

3.1、CC攻击

challenge collapasar
当时绿盟为了防御 DDoS攻击研发了一种叫做 collapasar 的产品,能有效的防御 SYN Flood攻击,黑客为了挑衅,研发了一款challenge collapasar 攻击工具(简称 CC

  • 原理:针对资源消耗比较大的页面不断发起不正常的请求,导致资源耗尽

因此在发送CC攻击前,先需要寻找加载比较慢,消耗资源比较多的网页,比如需要查询数据库的页面,读写硬盘文件的等。通过CC攻击,使用爬虫对某些加载需要消耗大量资源的页面进行HTTP请求。

3.2、DNS flood

DNS Flood 攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络上根本不存在的域名,被攻击的DNS服务器在接收到域名解析请求时首先会在服务器上查找是否有对应缓存,如果查找不到且该域名无法直接由服务器解析时,DNS服务器会向上层DNS服务器递归查询域名信息。

域名解析的过程给服务器带来了很大的负载,每秒钟域名解析超过一定的数量就会造成DNS服务器解析域名超时

根据微软的统计数据,一台DNS服务器所能承受的动态域名查询上限是每秒钟9000个请求,而我们知道,在一台 P3PC机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的DNS服务器瘫痪。由此可见DNS服务器的脆弱性。

3.3、HTTP慢速连接攻击

针对HTTP协议,先建立起HTTP连接,设置一个较大的 content-length,每次只发送很少的字节,让服务器一直以为HTTP头部没有传输完成,这样连接一多就会出现连接耗尽。

3.4、应用层DDOS防御

  • 关闭最大连接数等,合理配置中间件,缓解DDoS攻击
  • 请求中添加验证码
  • 编写代码时,尽量实现优化,并合理使用缓存技术,减少数据库操作
  • 判断USER_Agent 字段(可伪造,不可靠)
  • 针对 IP + cookie,限制访问频率(由于cookie可更改,IP可以使用代理或者肉鸡,也不可靠)
  • 花钱堆机器
  • 报警

应用层的防御有时比网络层的更难,因为导致应用层被DDoS攻击的因素非常多,有时往往因为程序员的失误,导致某个页面加载需要消耗大量的资源,有时是因为中间件配置不当等等,而应用层DDoS防御的核心就是区分人与机器(爬虫),因为大量的请求不可能是人为的,肯定是机器构造的。因此如果能有效区分人与爬虫行为,则可以很好地防御此攻击

4、其他DDOS攻击

利用XSS(举例:大站漏洞,往小站转发,无本万利)

来自P2P网络攻击

大家都知道,互联网上P2P用户和流量都是一个极为庞大的数字,如果他们都去一个指定的地方下载数据,成千上万的真是IP地址连接过来,没有哪个设备支持的住。拿BT下载来说,仿造一些热门视频的种子,发布到搜索引擎,就足以骗到许多用户和流量了,但这还只是基本攻击。

高级的P2P攻击,是直接欺骗资源管理服务器。如迅雷客户端会把自己发现的资源上传到资源管理服务器,然后推送给其他需要下载相同资源的客户,这样,一个连接就发布出去。通过协议逆向,攻击者伪造出大批量的热门资源信息通过资源管理中心分发出去,瞬间就可以传遍整个P2P网络。更为恐怖的是,这种攻击是无法停止的,即使是攻击者自身也无法停止,攻击一直持续到P2P官方发现问题更新服务器且用户冲高器下载软件为止。

六、流量劫持

流量劫持应该算是黑产行业一大经济支柱了吧!简直让人恶心到吐。

流量劫持基本分两种: DNS劫持和 HTTP劫持,目的都是一样的,就是当用户访问 A 的时候,给你展示的并不是或者不完全是A提供的内容。

1、DNS劫持

也叫域名劫持,可以这么理解:你打了一辆车想去商场吃饭,结果你打的车是小作坊派来的,直接给你拉到小作坊去了。
DNS的作用是把王国良地址域名对应到真实的计算机能够识别的IP地址,以便计算机能够进一步通信,传递网址和内容等,如果当用户通过某一个域名访问一个站点的时候,被篡改的DNS服务器返回的是一个恶意钓鱼的站点IP,用户就被劫持到了恶意钓鱼站点,然后继而会被钓鱼输入各种账户密码信息,泄露隐私。

这类劫持,要不就是网络运营商搞得鬼,一般小的网络运营商与黑产勾结,会劫持DNS,要不就是电脑中毒,被恶意篡改了路由器的DNS配置,基本上作为开发者或站长却是很难察觉的,除非有用户反馈。

现在升级版的DNS劫持还可以针对特定用户,特定区域等使用了用户画像进行筛选用户劫持的办法,另外这类广告显示更随机更小,一般站长很难察觉,除非用户投诉,就算察觉到了取证举报更难,无论如何,如果接到了DNS劫持的反馈,一定要做好以下几件事:

  • 取证很重要,时间、地点、IP、拨号账户、截屏、URL地址一定要有
  • 可以根据劫持区域的电信营业商进行投诉反馈
  • 如果投诉反馈无效,直接去工信部投诉,一般来说会加白你的域名

2、HTTP劫持

HTTP劫持你可以这么理解,你打了一辆车想去商场吃饭,结果司机跟你递一路小作坊的广告。
HTTP劫持主要是当用户访问某个站点的时候回靖哥哥运营商网络,而不法运营商和黑产勾结能够截获HTTP请求返回内容,并且能够篡改内容,然后在返回给用户,从而实现劫持页面,轻则插入小广告,重则直接篡改成钓鱼网站页面骗用户隐私。

能够实现HTTP劫持的根本原因是 HTTP协议没有办法对通信对方的身份进行校验以及对数据完整性进行校验,如果能解决这个问题,则流量劫持将无法轻易发生,所以防止HTTP劫持的方法只有将内容加密,让劫持者无法破解篡改,这样就可以防止HTTP劫持了。

七、服务器漏洞

  • 越权操作漏洞

  • 目录遍历漏洞
    如 http://host.com/…/…/…/etc/passwd
    防御方法就是需要对URL或参数进行 …/ ./等字符的转义过滤

  • 物理路径泄露

  • 源码暴露漏洞

八、多少QPS才是高并发

1、吞吐量(TPS)、QPS、并发数、响应时间(RT)的概念

1)、QPS计算公式

  • 原理:每天80%的访问集中在20%的时间里,这里20%时间叫做峰值时间。
  • 公式:(总PV(页面浏览量)数 x 80%)/(每天秒数 x 20%) = 峰值时间每秒请求数(QPS)。
  • 机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器。

每天300万 PV 的在单台机器上,这台机器需要多少QPS?

(3000000 x 0.8) / (86400 x 0.2) = 139(QPS)。

一般需要达到139QPS,因为是峰值。

2)、QPS

每秒查询QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

每秒查询率

因特网上,经常用每秒查询率来衡量域名系统服务器的机器性能,其即为QPS。

3)、响应时间(RT)

响应时间是指系统对请求做出响应的时间。

4)、吞吐量(TPS)

吞吐量是指系统在单位时间内处理请求的数量。

5)、并发用户数

并发用户数是指系统可以同时承载的正常使用系统的用户的数量。

2、高并发的四个角度

  • 首先是无状态的前端机器无足以承载请求流量,需要进行水平扩展,一般QPS是千级。
  • 其次是关系型数据库无法承载读取或写入峰值,需要数据库横向扩展或引入nosql,一般是千到万级。
  • 然后是单机nosql无法承载,需要nosql横向扩展,一般是十万到百万QPS。
  • 最后是难以单纯横向扩展nosql,比如微博就引入多级缓存架构,这种架构一般可以应对百万到千万对nosql的访问QPS。

3、PV和QPS

比如微博每天1亿多PV的系统一般也就1500QPS,5000QPS峰值。

比如:
2cpu 4G 机器单机一般1000QPS
8cpu 8G 机器单机一般7000QPS

4、脱离业务讨论技术都是耍流氓

具体多少QPS跟业务强相关,制度接口读缓存,将压力给到缓存 3000QPS没问题,写请求1000+也正常,但复杂些可能也就几百几十QPS。

你可能感兴趣的:(网络,安全,html,服务器,爬虫)