攻击
中间人攻击
Man-in-the-Middle Attack,简称 “MITM攻击”。
是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
常见类型
Wi-Fi仿冒
攻击者创建恶意Wi-Fi接入点,接入点名称一般与当前环境相关,例如某某咖啡馆,具有极大迷惑性,而且没有加密保护。当用户不小心接入恶意Wi-Fi接入点后,用户后续所有的通信流量都将被攻击者截获,进而个人信息被窃取。
ARP欺骗
ARP欺骗也称为ARP投毒,即攻击者污染用户的ARP缓存,达到使用户流量发往攻击者主机的目的。局域网用户发起访问都需要由网关进行转发,用户首先发起ARP请求获取网关IP地址对应的MAC地址,此时攻击者冒充网关向用户应答自己的MAC地址,用户将错误的MAC地址加入自己的ARP缓存,那么后续用户所有流量都将发往攻击者主机。
DNS欺骗
DNS欺骗也称为DNS劫持。用户访问互联网的第一步就是向DNS服务器发起DNS请求,获取网站域名对应的IP地址,然后DNS服务器返回域名和IP地址的对应关系。攻击者利用这一过程,篡改域名对应的IP地址,达到重定向用户访问的目的。对于用户来说,浏览器访问的还是一个合法网站,但实际访问的是攻击者指定的IP地址对应的虚假网站。
邮件劫持
攻击者劫持银行或其他金融机构的邮箱服务器,邮箱服务器中有大量用户邮箱账户。然后攻击者就可以监控用户的邮件往来,甚至可以冒充银行向个人用户发送邮件,获取用户信息并引诱用户进行汇款等操作。
SSL劫持
当今绝大部分网站采用HTTPS方式进行访问,也就是用户与网站服务器间建立SSL连接,基于SSL证书进行数据验证和加密。HTTPS可以在一定程度上减少中间人攻击,但是攻击者还是会使用各种技术尝试破坏HTTPS,SSL劫持就是其中的一种。SSL劫持也称为SSL证书欺骗,攻击者伪造网站服务器证书,公钥替换为自己的公钥,然后将虚假证书发给用户。此时用户浏览器会提示不安全,但是如果用户安全意识不强继续浏览,攻击者就可以控制用户和服务器之间的通信,解密流量,窃取甚至篡改数据。
预防方案
- 用可信的第三方CA厂商,不下载未知来源的证书
- 确认你访问的URL是HTTPS的,确保网站使用了SSL。不随意忽略证书不安全告警,如果产生告警说明浏览的网站可能不安全
- 不随意连接公共Wi-Fi,仅连接已知可信的Wi-Fi,避免流量被恶意劫持。自有Wi-Fi不要使用路由器默认密码,设置高强度加密保护,避免被破解
- 不要使用公用网络发送一些敏感的信息
- 不要去点击一些不安全的连接或者恶意链接或邮件信息
XSS
XSS(Cross Site Scripting),跨站脚本攻击。
本来缩写是CSS,为了和层叠样式的CSS有所区别,所以在安全领域叫“XSS”。
是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie等,进而危害数据安全。
常见类型
1. 反射型
此漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
2. 存储型
这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
html
<!-- 将此输入到输入框并保存 -->
<img src="11" onerror="console.log(window.localStorage)" />
3. DOM 型
预防方案
1. 输入、输出检查
2. Set-Cookie: HttpOnly
浏览器不能通过document.cookie
的方式获取到cookie内容
3. CSP
CSRF
CSRF(Cross-site request forgery),跨站请求伪造。
冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的事情(如修改用户信息,删初评论等)。
主要是因为浏览器在发送 HTTP 请求时候自动带上 Cookie。
流程
- 受害者登录a.com,并保留了登录凭证(Cookie)
- 攻击者引诱受害者访问了b.com
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带 a.com 的 Cookie
- a.com 接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
- a.com 以受害者的名义执行了act=xx
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让 a.com 执行了自己定义的操作
html
<!-- post表单案例 -->
<form action="http://bank.example/withdraw" method="POST">
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" />
</form>
<script>
document.forms[0].submit()
</script>
预防方案
1. 使用 Token 🌟
- 服务端给用户生成一个 token,加密后传递给用户
- 用户在提交请求时,需要携带这个 token 在请求数据中或头信息中
- 服务端验证 token 是否正确
2. 同源检测(Referer 或 Origin)
3. Set-Cookie: SameSite=xxx
4. 添加验证码
强制用户必须与应用进行交互,才能完成最终请求。比如 在转账或付款的时候,还需要输入密码/验证码。
点击劫持
点击劫持(Clickjacking),是指利用透明的按钮或连接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个连接访问内容的一种攻击手段。
预防方案
X-FRAME-OPTIONS
- DENY:拒绝任何域加载
- SAMEORIGIN:允许同源域下加载
- ALLOW-FROM url:可以定义允许frame加载的页面地址
SQL注入
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗数据库服务器执行恶意的SQL命令,从而达到和服务器 进行直接的交互
预防方案
- 后台进行输入验证,对敏感字符过滤。
- 使用参数化查询,能避免拼接SQL,就不要拼接SQL语句。
参考
- 攻击类型 - MDN
- 什么是中间人攻击(MITM)? - 华为
- 看图学 HTTPS - 掘金
有中间人攻击的解释图 - 【面试篇】寒冬求职之你必须要懂的 Web 安全
XSS,CSRF,点击劫持 - XSS(Cross Site Scripting)跨站脚本攻击 - 前端面试题宝典
- 前端安全系列(一):如何防止 XSS 攻击? - 美团技术团队
- 前端安全系列(二):如何防止 CSRF 攻击? - 美团技术团队