常见的web攻击总结XSS
什么是XSS
XSS攻击:跨站脚本攻击(Cross-Site Scripting)。XSS是一种常见的web安全漏洞,它允许攻击者将恶意代码植入到提供给其他用户使用的页面中。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到第三方,即攻击者、客户端与Web应用。XSS的攻击目标是为了盗取存储在客户端的cookies或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互。
XSS通常可以分为两大类:
1.存储型XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为:
恶意用户的html输入web程序->进入数据库->web程序->用户浏览器
2.反射型XSS,主要做法是将脚本代码加入URL地址请求的参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。
比如:
恶意用户在网站发表文章内容为,如果在存储数据库的时候没有对该内容进行过滤,那么当其他用户在访问这篇文章的时候,服务器从数据库读取后然后响应给客户端,浏览器执行了这段脚本,就会将cookies显示出来,这就是典型的存储型XSS。
如何预防XSS
坚决不要相信用户的输入,并过滤掉输入中的所有特殊字符
目前防御XSS主要有以下几种方式:
1.过滤特殊字符
避免XSS的方法之一主要是将用户所提供的内容进行过滤(比如script标签)
2.使用http头指定类型
w.Header().Set("Content-Type","text/javascript") 这样就可以让浏览器解析javascript代码,而不是会html输出
SQL注入
什么是SQL注入
攻击者成功的向服务器提交恶意的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注入
使用预处理机制;
使用验证函数或者其他方式应用的自定义参数进行过滤;
尽量使用PDO方式,并使用参数绑定。
DDOS
什么是DDOS
DDOS:分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求使服务器***。DDOS攻击是在DOS攻击基础上的,可以通俗理解,DOS是单挑,而DDOS是群殴,因为现代技术的发展,DOS攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。在技术角度上,DDOS攻击可以针对网络通讯协议的各层,手段大致有:TCP类的SYN Flood、ACK Flood,UDP类的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris类等等。一般会根据攻击目标的情况,针对性把技术手法混合,以达到最低的成本最难防御的目的,并且可以进行合理的节奏控制,以及隐藏保护攻击资源。
下面介绍一下TCP协议的SYN攻击。
在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接成为半连接(half-open connect)。此时服务器处于SYN-RCVD状态。当收到ACK之后,服务器才能注入ESTABLISHED状态。
SYN攻击指的是:攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断地重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统***。
如何预防DDOS
阿里安全团队在实战中发现,DDOS防御产品的核心是检测技术和清洗技术。检测技术就是检测网站是否正在遭受DDOS攻击,而清洗技术就是清洗掉异常流量。而检测技术的核心在于对业务深刻的理解,才能快速精准判断是否真的发生了DDOS攻击。
CSRF
什么是CSRF
CSRF(Cross-site request forgery),跨站请求伪造,也被称为:one click attack、sessionriding ,缩写为:CSRF/XSRF。攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗取你的账号,甚至用于***安全产品,虚拟货币转账.....造成个人隐私泄露以及财产安全。
从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:1.登录受信任网站A,并在本地生成cookies。2.在不登出的情况下,访问危险网站B。
看到这里,你也许会说:如果我不满足以上两个条件中的一个,我就不会受到CSRF攻击。是的,确实如此,但你不能保证以下情况就不会发生:1.你不能保证你登录了一个网站之后,不再打开一个tab页面并访问另外的网站。2.你不能保证你关闭了浏览器之后,你本地的cookies立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录或者结束会话了)3.上图中所谓的攻击网站,可能是一个存在其它漏洞的可信任的经常被人访问的网站。
如何预防CSRF攻击
可以使用HTTP_REFERER检测请求网站是否为允许请求的网址(但可使用referer伪造)
在请求地址中添加 单次token 并验证
在 HTTP 头中自定义属性并验证
参考文档: