跨站脚本攻击(cross site script
)
恶意攻击者往web
页面插入恶意可执行网页脚本代码,当用户浏览该页时,嵌入其中web
里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其它侵犯用户安全隐私的目的。XSS
的攻击方式千变万化,但仍可大致分成几个类型:
一般是通过给别人发送带有恶意脚本代码参数的URL
,当URL
地址被打开时,特有的恶意代码参数被html
解析,执行。
HTTP
的GET
和POST
请求就能完成一次攻击,拿到用户隐私数据URL
、document
(文档)、referrer
、document.forms
这种 DOM API
中获取数据直接渲染eval
、new function()
、document.write()
、window.setInterval()
、innerhtml
、document.setTimeout()
、document.createElement()
等执行字符串的方法DOM
渲染的方法传入的字符串参数做 escope
转义escope
转义代码一般存在于form
表单提交等交互操作,如发帖留言、提交文本信息等。黑客利用XSS
漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰将其渲染执行。
此攻击成功需同时满足以下条件:
POST
请求提交表单后端没做转义直接入库DOM
DDOS
攻击的肉鸡跨站请求伪造攻击(cross-site request forgery
)
攻击者盗用了你的身份,以你的名义发送恶意请求。
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。
造成个人隐私泄露以及财产安全问题
可以理解为有一个小偷在你配钥匙的地方得到了你家的钥匙,然后拿着去你家想偷什么偷什么。
完成CSRF
攻击必须有三种条件:
A
,并在本地记录了cookie
A
的情况下(也就是cookie
生效的情况下),访问了恶意攻击者提供的引诱危险站点B
(B
要求访问A
)——(B
也可能为一个存在其他漏洞的可信任网站)A
没有做任何CSRF
防御GET
、POST
和cookie
攻击者成功的向服务器提交恶意的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
查询去运行主机系统级命令。
防止SQL
注入主要是不能允许用户输入的内容影响正常的SQL
语句逻辑,用户输入的任何内容都必须进行转义过滤,当然仅做到这个是不够的:
web
应用的数据库的操作权限,满足工作即可,最大化减少注入攻击对数据库的危害SQL
注意检测工具进行检测。 sqlmap
、SQLninja
等SQL
错误信息碰到要操作数据库的代码,一定要慎重,小心使得万年船,多找你个人来多次 code review,善于利用检测工具。
通过HTTP
请求直接侵入主机,执行攻击者预设的shell
命令。
注:无论何种后端语言,凡是涉及到代码调用系统shell
命令一定要慎重。
分布式拒绝服务攻击(Distributed Denial Of Service
)
其原理就是利用大量的请求造成资源过载,导致服务不可用,这个攻击应该不能算安全问题,这种攻击根本就是耍流氓,伤敌一千,自损八百的行为。
简单来说就是发送大量请求使服务器瘫痪。DDOS
攻击是在DOS
攻击基础上的,可以通俗理解,dos
是单挑,而ddos
是群殴,因为现代技术的发展,dos
攻击的杀伤力降低,所以出现了DDoS
,攻击者借助公共网络,将大量的计算机设备联合起来,向一个或多个目标进行攻击。
DDOS
攻击可以理解为:你开了一家店,隔壁家店看不惯,就雇了一大堆黑涩会人员进你店里干坐着,也不消费,其他客人也进不来,导致你营业惨淡。为啥说DDoS
是个伤敌一千,自损八百的行为呢?毕竟隔壁店也花了不少钱雇黑涩会不是。DDoS
攻击的目的基本上就以下几个:
也许你的站点遭受过DDoS
攻击,具体什么原因怎么解读见仁见智。DDoS
从层次上可分为网络层和应用层攻击。从攻击手法上可分为 快型流量攻击 与 慢型流量攻击,但其原理都是造成资源过载,导致服务不可用。
网络层DDoS
攻击包括 SYN Flood
、ACK Flood
、UDP Flood
、ICMP Flood
SYN Flood
攻击主要利用了TCP
三次握手过程中的bug
,我们都知道TCP
三次握手过程中是要建立连接的双方发生 SYN
,SYN+ACK
,ACK
数据包,而当攻击方随意构造源IP
发送SYN
包时,服务器返回的SYN+ACK
就不能得到应答(因为IP
是随意构造的),此时服务器就会常识重新发送,并且会有至少30s
的等待时间,导致资源饱和服务不可用,此攻击属于慢性DDOS
攻击。
ACK Flood
攻击是建立在TCP
连接之后,所有的数据传输TCP
报文都是带有ACK
标志位的,主机在接收到一个带有ACK
标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST
包告知此端口不存在。
连接四原组:源IP地址、目的IP地址、源端口、目的端口
这里服务器要做两个动作: 查表,回应ACK/RST
。小包大流量攻击。
对Apache
和 IIS
来说,lokbps
的 ACK Flood
不构成威胁。
UDP Flood
攻击是由于UDP
是一种无连接的协议,因此攻击者可以仿造大量的源IP地址去发送UDP
包,此种攻击属于大流量攻击。
正常应用情况下,UDP
包双休流量会基本相等,因此发起这种攻击的攻击者在消耗对方资源的同时,也在消耗自己的资源。
大流量攻击,防火墙可屏蔽ICMP
包,已落伍。
究其本质无法防御,优化服务器部署,提升网络带宽。
DDoS
设备,进行流量清洗SYN
半连接数目,缩短SYN
半连接的 timeout
时间ICMP
包等应用层DDoS
攻击一般发生在TCP
建立握手成功后,应用程序处理请求的时候,现在很多常见的DDoS
攻击都是应用层攻击,应用层攻击千变万化,目的就是在网络应用层耗尽你的带宽,下面列出几种典型的攻击类型
(challenge collapasar
)
当时绿盟为了防御 DDoS
攻击研发了一种叫做 collapasar
的产品,能有效的防御 SYN Flood
攻击,黑客为了挑衅,研发了一款challenge collapasar
攻击工具(简称 CC
)
因此在发送CC
攻击前,先需要寻找加载比较慢,消耗资源比较多的网页,比如需要查询数据库的页面,读写硬盘文件的等。通过CC
攻击,使用爬虫对某些加载需要消耗大量资源的页面进行HTTP
请求。
DNS Flood
攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络上根本不存在的域名,被攻击的DNS
服务器在接收到域名解析请求时首先会在服务器上查找是否有对应缓存,如果查找不到且该域名无法直接由服务器解析时,DNS
服务器会向上层DNS
服务器递归查询域名信息。
域名解析的过程给服务器带来了很大的负载,每秒钟域名解析超过一定的数量就会造成DNS
服务器解析域名超时
根据微软的统计数据,一台DNS
服务器所能承受的动态域名查询上限是每秒钟9000
个请求,而我们知道,在一台 P3
的PC
机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的DNS
服务器瘫痪。由此可见DNS
服务器的脆弱性。
针对HTTP
协议,先建立起HTTP
连接,设置一个较大的 content-length
,每次只发送很少的字节,让服务器一直以为HTTP
头部没有传输完成,这样连接一多就会出现连接耗尽。
DDoS
攻击USER_Agent
字段(可伪造,不可靠)IP + cookie
,限制访问频率(由于cookie
可更改,IP可以使用代理或者肉鸡,也不可靠)应用层的防御有时比网络层的更难,因为导致应用层被DDoS
攻击的因素非常多,有时往往因为程序员的失误,导致某个页面加载需要消耗大量的资源,有时是因为中间件配置不当等等,而应用层DDoS
防御的核心就是区分人与机器(爬虫),因为大量的请求不可能是人为的,肯定是机器构造的。因此如果能有效区分人与爬虫行为,则可以很好地防御此攻击
利用XSS
(举例:大站漏洞,往小站转发,无本万利)
来自P2P网络攻击
大家都知道,互联网上P2P
用户和流量都是一个极为庞大的数字,如果他们都去一个指定的地方下载数据,成千上万的真是IP
地址连接过来,没有哪个设备支持的住。拿BT
下载来说,仿造一些热门视频的种子,发布到搜索引擎,就足以骗到许多用户和流量了,但这还只是基本攻击。
高级的P2P
攻击,是直接欺骗资源管理服务器。如迅雷客户端会把自己发现的资源上传到资源管理服务器,然后推送给其他需要下载相同资源的客户,这样,一个连接就发布出去。通过协议逆向,攻击者伪造出大批量的热门资源信息通过资源管理中心分发出去,瞬间就可以传遍整个P2P
网络。更为恐怖的是,这种攻击是无法停止的,即使是攻击者自身也无法停止,攻击一直持续到P2P
官方发现问题更新服务器且用户冲高器下载软件为止。
流量劫持应该算是黑产行业一大经济支柱了吧!简直让人恶心到吐。
流量劫持基本分两种: DNS
劫持和 HTTP
劫持,目的都是一样的,就是当用户访问 A
的时候,给你展示的并不是或者不完全是A
提供的内容。
也叫域名劫持,可以这么理解:你打了一辆车想去商场吃饭,结果你打的车是小作坊派来的,直接给你拉到小作坊去了。
DNS
的作用是把王国良地址域名对应到真实的计算机能够识别的IP地址,以便计算机能够进一步通信,传递网址和内容等,如果当用户通过某一个域名访问一个站点的时候,被篡改的DNS
服务器返回的是一个恶意钓鱼的站点IP
,用户就被劫持到了恶意钓鱼站点,然后继而会被钓鱼输入各种账户密码信息,泄露隐私。
这类劫持,要不就是网络运营商搞得鬼,一般小的网络运营商与黑产勾结,会劫持DNS
,要不就是电脑中毒,被恶意篡改了路由器的DNS
配置,基本上作为开发者或站长却是很难察觉的,除非有用户反馈。
现在升级版的DNS
劫持还可以针对特定用户,特定区域等使用了用户画像进行筛选用户劫持的办法,另外这类广告显示更随机更小,一般站长很难察觉,除非用户投诉,就算察觉到了取证举报更难,无论如何,如果接到了DNS
劫持的反馈,一定要做好以下几件事:
IP
、拨号账户、截屏、URL
地址一定要有HTTP
劫持你可以这么理解,你打了一辆车想去商场吃饭,结果司机跟你递一路小作坊的广告。
HTTP
劫持主要是当用户访问某个站点的时候回靖哥哥运营商网络,而不法运营商和黑产勾结能够截获HTTP
请求返回内容,并且能够篡改内容,然后在返回给用户,从而实现劫持页面,轻则插入小广告,重则直接篡改成钓鱼网站页面骗用户隐私。
能够实现HTTP
劫持的根本原因是 HTTP
协议没有办法对通信对方的身份进行校验以及对数据完整性进行校验,如果能解决这个问题,则流量劫持将无法轻易发生,所以防止HTTP
劫持的方法只有将内容加密,让劫持者无法破解篡改,这样就可以防止HTTP
劫持了。
越权操作漏洞
目录遍历漏洞
如 http://host.com/…/…/…/etc/passwd
防御方法就是需要对URL或参数进行 …/ ./等字符的转义过滤
物理路径泄露
源码暴露漏洞
每天300万 PV 的在单台机器上,这台机器需要多少QPS?
(3000000 x 0.8) / (86400 x 0.2) = 139(QPS)。
一般需要达到139QPS,因为是峰值。
每秒查询QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
每秒查询率
因特网上,经常用每秒查询率来衡量域名系统服务器的机器性能,其即为QPS。
响应时间是指系统对请求做出响应的时间。
吞吐量是指系统在单位时间内处理请求的数量。
并发用户数是指系统可以同时承载的正常使用系统的用户的数量。
比如微博每天1亿多PV的系统一般也就1500QPS,5000QPS峰值。
比如:
2cpu 4G 机器单机一般1000QPS
8cpu 8G 机器单机一般7000QPS
具体多少QPS跟业务强相关,制度接口读缓存,将压力给到缓存 3000QPS没问题,写请求1000+也正常,但复杂些可能也就几百几十QPS。