第 190 题:除了 CSRF,你还知道其它的攻击方式吗?
CSRF(Cross-site request forgery)简称:跨站请求伪造,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我所了解的,除了 CSRF ,还有:
XSS 攻击
什么是 XSS 攻击
XSS 是跨站脚本攻击(Cross Site Scripting),为了与 CSS 区别开来,故简称 XSS
XSS 攻击是指往页面恶意的注入脚代码本。当用户浏览该页时,嵌入其中的 Script 代码会被执行,从而达到恶意攻击用户的目的。
当页面被注入了恶意 JavaScript 脚本时,浏览器是无法区分这些脚本是否是被恶意注入的还是正常的页面脚本,所以恶意注入 JavaScript 脚本也拥有所有的脚本权限。它可以拿到:
Cookie 信息
document.cookie 获取 Cookie 信息,然后通过 XMLHttpRequest 或 Fetch 加上 CORS 功能将数据发送给恶意服务器
监听用户行为
通过 addEventListener 监听用户行为,获取用户输入的银行卡支付密码等信息
更改 DOM 结构
伪造登录、输入支付秘密等窗口,获取用户私密信息
在页面内生成浮窗广告
劫持流量实现恶意跳转
例如在网页中恶意注入以下语句:
当网站被访问时就会自动跳到瓶子君的官网首页。早在2011年新浪就曾爆出过严重的 XSS 漏洞,导致大量用户自动关注某个微博号并自动转发某条微博。具体各位可以自行百度
黑客一旦拿到这些信息,就可以对用户进行攻击,例如模拟用户登录、进行转账等,所以我们应该学习并避免黑客对我们的网站进行攻击,维护网站安全,从以下方面切入:
XSS 是如何注入的
其中常见的 XSS 攻击主要分为:存储型 XSS 攻击 、反射型 XSS 攻击 、基于 DOM 的 XSS 攻击
1. 存储型 XSS 攻击
存储型 XSS 攻击是指黑客利用站点漏洞将一段恶意 JavaScript 代码提交到网站的数据库中 存储 ,当用户访问网站的时候,网站将恶意脚本同正常页面一起返回,浏览器解析执行了网站中的恶意脚本,将用户的 Cookie 信息等数据上传到恶意服务器
存储型 XSS 攻击经常出现在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种 XSS 比较危险,容易造成蠕虫,盗窃 cookie 等
2. 反射型 XSS 攻击
反射型 XSS 一般是黑客通过特定的手段(例如电子邮件等),诱导用户去访问一个包含恶意脚本的 URL,当用户访问这个带有恶意脚本的 URL 时,网站又把恶意 JavaScript 脚本返回给用户执行
反射型 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗
3. 基于 DOM 的 XSS 攻击
基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结构,是纯粹发生在客户端的攻击。
DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞。
总结
存储型 XSS: 持久化,代码是存储在服务器中的
反射型 XSS: 非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面
基于 DOM 的 XSS: 不经过后端,纯粹发生在客户端的攻击,属于前端 JavaScript 自身的安全漏洞
如何阻止 XSS 攻击
无论是上面的哪种 XSS 攻击,都是恶意的向浏览器注入脚本,然后通过恶意脚本将用户信息发送到恶意服务器上,所以我们要阻止 XSS 攻击,就要阻止恶意脚本的注入与恶意信息的发送
常见的阻止 XSS 的策略有:
1. 过滤特殊字符,或对特定字符进行编译转码
例如对
<script>alert(document.cookie)</script>
进行过滤为,或直接转码成
<script>alert('document.cookie')</script>
,这样就不会在页面执行了2. 对重要的 cookie 设置 httpOnly
HttpOnly 最早由微软提出,至今已经成为一个标准。
通过对重要的 Cookie 设置 httpOnly ,防止客户端通过 document.cookie 读取 cookie ,也就是说,JavaScript 读取不到此条 Cookie ,也就无法提交给恶意服务器了
注意:此 HTTP 头由服务端设置
3. URLEncode 操作
将不可信的值输出 URL参数之前,进行 URLEncode操作。对于从 URL 参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)
4. Web 安全头支持
浏览器自带的防御能力,一般是通过开启 Web 安全头生效的。具体有以下几个:
text/plain
却当成text/html
渲染,特别当本站点 server 的内容未必可信的时候。SQL 注入攻击
SQL注入是一种非常常见的数据库攻击手段,也是网络世界中最普遍的漏洞之一,它其实就是黑客在表单中填写包含 SQL 关键字的数据,表单数据提交给服务器时让数据库执行恶意 SQL 的过程。
例如
' OR '1'='1
,当我们输如用户名 admin ,然后密码输如' OR '1'=1='1
的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是SELECT * FROM user WHERE username='' and password=''
,经过参数拼接后,会执行 SQL语句SELECT * FROM user WHERE username='' and password='' OR '1'='1'
,这个时候1=1是成立,自然就跳过验证了。如何防止 SQL 注入
主要是后端进行对 SQL 注入攻击的防护,常见的防护机制有:
?
代替了。当真正运行时,传过来的参数会被看作是一个纯文本,不会重新编译,不会被当做sql指令%
作为like
语句中的参数时,要对其进行转义处理DDoS 攻击
DDoS:分布式拒绝服务攻击(Distributed Denial of Service),DDos攻击是在 DOS 攻击基础上的,可以通俗理解,dos 是单挑,而 ddos 是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。
为了防御 DDoS 攻击,阿里巴巴的安全团队在实战中发现,需要做的就是检测技术和清洗技术,检测技术就是检测网站是否正在遭受 DDoS 攻击,而清洗技术就是清洗掉异常流量。这里不做引伸
上传文件攻击
如果 web 网站没有对文件类型进行严格的校验,导致可执行文件被恶意上传到了服务器,恶意脚本就会执行
如何防止上传文件攻击
DNS 查询攻击
DNS 查询攻击就是攻击者通过精心构造 DNS报文 ,在 DNS 查询解析某个域名时,冒充真正的权威 DNS 做出回应,使得用户访问得到一个虚假响应。一旦本地接受了这个虚假响应并写入缓存,DNS 就会被攻击,用户也不清楚自己正在访问错误的地址或数据
关于防御的话,就是限制DNS解析器仅响应来自可信源的查询或者关闭DNS服务器的递归查询等
总结
本文结合上篇 如果让你去实现一个 CSRF 攻击你会怎么做? ,总共介绍了六种 web 攻击与防护:
其中最重要的是 CSRF 攻击、 XSS 攻击,其余只做了解即可。
原文
XSS(Cross Site Scripting),跨站脚本攻击
对应措施:输入值过滤,HTML转义