随着互联网与浏览器的发展,我们能在浏览器上做越来越多的事情,比如看电影、听音乐、购物、玩游戏….我们在享受着技术给我们带来便利的同时,也伴随着更多的风险,因为可以做的事情多了,那么黑客可以利用的漏洞也就更多了,攻击手段也就更多种多样,这篇文章就准备聊聊现在web领域常见的一些攻击,从而可以让我们思考在平时的开发中如何去规避这些攻击,废话不多说,开搞!
现在web领域常见的攻击有如下种类
- XSS(跨站脚本攻击)
- CSRF(跨站请求伪造)
- 点击劫持
- CDN劫持
- opener攻击
- DNS劫持
- SQL注入
由于XSS和CSRF我准备单独写两篇文章来讲解它们,所以接下来除了它俩之外,其他的就分别浅谈一下各类攻击的方式与危害,从而可以对web攻击有一个系统的认知,开始吧~
点击劫持
实现的步骤如下
- 利用一个 iframe 加载一个目标网页A,此网站是攻击者需要用户真正操作的网页
- 准备一个诱导页B,这个页面会放置一些 可交互 的元素对准网页A上的内容,从而欺骗用户进行交互
- 将iframe 透明度 设置为0,并放置在诱导页B之上,这样用户根本就不知道自己实际进行交互的是网页A,从而达到点击劫持的目的
这种方式其实就是一个障眼法,利用iframe不可见,从而达到欺骗的目的,要想规避这种攻击,有如下方式
- 网页的http头部增加 X-Frame-Options,这个响应头有三个值可选
- DENY:表示该页面不允许在iframe中展示,即便是在相同域名的页面中嵌套也不允许
- SAMEORIGIN:表示该页面可以在相同域名页面的iframe中展示.
- ALLOW-FROM:origin:表示该页面可以在指定来源的iframe中展示,Chrome不支持 Firefox支持
- 判断 top.location 与 self.location 是否相等,如果不相等则证明当前网页被iframe加载,那么就可以执行类似 重定向 的操作来避免被引用
CDN劫持
现在web应用为了提高性能,往往会把很多静态资源诸如图片、js、css都放在CDN上,这样就可以提高网站的加载速度,但是如果黑客攻击了CDN服务器,修改了静态资源,那么用户就会访问到被污染的资源,从而达到黑客的目的
opener攻击
在网页中进行新标签的跳转,一般有两种方式
<a target='_blank' href='http://www.baidu.com'>
window.open('http://www.baidu.com')
看上去没问题,但是opener攻击实现的核心就是利用新跳转的网页可以通过 window.opener 访问到原页面的 window 对象,从而可以做任何黑客想做的事情,例如在用户不知情的情况下,将原网页重定向到黑客的网站,从而可以达到窃取用户信息的目的
要规避这种攻击,上述两种跳转方式需要如下调整
<a target='_blank' href='http://www.baidu.com' rel="noopener noreferrer">
,noopener属性会使新页面无法访问到原页面的window对象,noreferrer属性使http请求头中不包含referrer字段var newTab = window.open(); newTab.opener = null; newTab.location = 'http://www.baidu.com';
,通过手动清除掉opener,从而规避了风险
DNS劫持
DNS是一个将域名映射为IP的系统,如果黑客将DNS服务器劫持了,那么它就可以修改域名到IP的映射关系,从而将一个正常的域名解析到黑客的服务器IP,从而实现攻击的目的
SQL注入
SQL注入即是指web应用程序对用户输入数据的 合法性 没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加 额外的 SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行 非授权 的任意查询,从而进一步得到相应的数据信息
SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击
规避SQL注入的主要防范措施就是加强对用户输入的 校验与过滤,前后端都要做,这样才能最大程度避免SQL注入的发生
结语
这篇文章浅谈了目前在web领域常见的一些攻击种类,在下一篇文章中,我将详细聊聊关于XSS攻击的东西,敬请期待吧~