赞
踩
互联网时代,数据安全与个人隐私信息等受到极大的威胁和挑战,本文将以几种常见的攻击以及防御方法展开分析。
定义:通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击 可造成的主要影响:
原理:恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的
如上图所示,网页URL输入一段包含js脚本的代码,在页面HTML中会获取url传参 keyword,并直接塞入到网页中直接执行,且参数可能会直接传到后台服务器中保存,后面再取到该参数时候又会执行脚本。整个过程中我们可以发现该漏洞产生的原因:1.输入的参数未经过安全过滤;2.恶意脚本被输出到网页;3.用户浏览器执行了恶意脚本。
特征:
一般在前端 Form 表单提交等交互功能,如文章留言,评论信息等。黑客利用的 XSS 漏洞,将输入内容提交进入数据库持久保存,当前端页面获得后端从数据库中注入脚本代码时,恰好将其渲染执行。如下图我们在掘金评论区输入恶意脚本(掘金社区做了校验处理,该评论是无法提交的)。
攻击成功需要同时满足以下几个条件:
- function escapeHtml(html) {
- html = html.replace(/&/g, '&');
- html = html.replace(/</g, '<');
- html = html.replace(/>/g, '>');
- html = html.replace(/"/g, '&quto;');
- html = html.replace(/'/g, ''');
- html = html.replace(/`/g, '`');
- html = html.replace(/\//g, '/');
- return html;
- }
-
但是对于类似富文本,显然不能通过上面的办法来转义所有字符,因为这样会把需要的格式也过滤掉。所以通常采用白名单过滤的办法,如下所示,示例使用了 js-xss 来实现,可以看到在输出中保留了 h1 标签且过滤了 script 标签
- const xss = require('xss')
- let html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>')
- console.log(html) // <h1>XSS Demo</h1><script>alert("xss");</script>
-
定义:利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。
根据上面的原理图,可以知道完成 CSRF 攻击必须要有三个条件:
防范 CSRF 攻击的思路:1. Get 请求不对数据进行修改;2. 不让第三方网站访问到用户 Cookie;3. 阻止第三方网站请求接口;4. 请求时附带验证信息,比如验证码或者 Token。
定义:点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
如下代码展示的是一个静态页面,用iframe引入一个csdn地址通过设置透明度属性之后,肉眼是没法看见的。外层设置一个吸引人的img 图片,诱导用户点击,实际上会触发点击到iframe 内嵌的页面。下面的图中展示了设置不同透明度的情况下可以看见的真实页面内容。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>点击劫持</title>
- </head>
- <style>
- iframe {
- width: 1440px;
- height: 900px;
- position: absolute;
- top: -0px;
- left: -0px;
- z-index: 2;
- -moz-opacity: 0;
- opacity: 0;
- filter: alpha(opacity=0);
- }
- button {
- position: absolute;
- top: 500px;
- left: 1050px;
- z-index: 1;
- width: 90px;
- height: 40px;
- }
- </style>
- <body>
- <button>嗨,点我有福利哟 ~ ~</button>
- <img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F2019-11-19%2F5dd3870a80b9c.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1665362005&t=e7270ce2a5b520cde3bd3f0f8835128e">
- <iframe src="https://www.csdn.net/" scrolling="no"></iframe>
- </body>
- </html>
-
X-FRAME-OPTIONS
是一个 HTTP 响应头,就是为了防御用 iframe 嵌套的点击劫持攻击。该响应头有三个值可选,分别是:定义:借助未验证的URL跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题。
黑客构建恶意链接(链接需要进行伪装,尽可能迷惑),发在QQ群或者是浏览量多的贴吧/论坛中。安全意识低的用户点击后,经过服务器或者浏览器解析后,跳到恶意的网站中。经常的做法是熟悉的链接后面加上一个恶意的网址,这样才迷惑用户。如下图:
攻击者利用SQL注入这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
我们通过如下例子来说明,前端表单提交的代码和后端的的sql语句如下所示:
- <form action="/login" method="POST">
- <p>Username: <input type="text" name="username" /></p>
- <p>Password: <input type="password" name="password" /></p>
- <p><input type="submit" value="登陆" /></p>
- </form>
-
- let querySQL = `
- SELECT *
- FROM user
- WHERE username='${username}'
- AND password='${password}'
- `;
-
但如果有一个恶意攻击者输入的用户名是 admin' --
,密码随意输入,就可以直接登入系统了,这就是SQL注入,sql注入的代码如下:
- SELECT * FROM user WHERE username='admin' --' AND password='xxxx'
-
在 SQL语句中,' --
是闭合和注释的意思,--
是注释后面的内容的意思,所以有效查询语句实际上是:
- SELECT * FROM user WHERE username='admin'
-
定义:通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell脚本的地方就有存在被攻击的风险。倘若调用Shell时存在疏漏,就可以执行插入的非法命令。
危害:命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。也就是说,通过命令注入攻击可执行操作系统上安装着的各种程序。
黑客构造命令提交给web应用程序,web应用程序提取黑客构造的命令,拼接到被执行的命令中,因黑客注入的命令打破了原有命令结构,导致web应用执行了额外的命令,最后web应用程序将执行的结果输出到响应页面中。假如需要实现一个需求:用户提交一些内容到服务器,然后在服务器执行一些系统命令去返回一个结果给用户:
- // 以 Node.js 为例,假如在接口中需要从 github 下载用户指定的 repo
- const exec = require('mz/child_process').exec;
- let params = {/* 用户输入的参数 */};
- exec(`git clone ${params.repo} /some/path`);
-
如果 params.repo
传入的是 https://github.com/admin/admin.github.io.git
确实能从指定的 git repo 上下载到想要的代码。 但是如果 params.repo
传入的是 https://github.com/xx/xx.git && rm -rf /* &&
恰好你的服务是用 root 权限起的,那就造成了服务器文件的丢失,OS命令攻击注入得逞。
shell-escape npm
包等。定义:DoS又被称为拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。该攻击通过网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。
- // -l 所指为IP结尾断点,65500 表示数据长度上限,-t 表示不停地ping目标地址
- ping -l 65500 192.169.1.1 -t
-
阻止发往该保护主机的后续连接请求、切断保护主机上的最老半连接会话、向 TCP Proxy 添加受保护 IP 地址
。定义:DDoS(Distributed denial of service attack)分布式拒绝服务攻击:黑客利用工具集合许多的网络带宽来同时对同一个目标发动大量的 DoS(Denial of Service)攻击,并可以借此躲避追踪的手段。
原理:一个完整的DDoS攻击体系由攻击者、主控端、代理端和攻击目标
四部分组成。主控端和代理端分别用于控制和实际发起攻击,其中主控端只发布命令而不参与实际的攻击,代理端发出DDoS的实际攻击包。这样攻击者可以逃避追踪,每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。
如果你对网络安全入门感兴趣,那么你点击这里
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/581315
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。