常见网络攻击方式
# 常见网络攻击方式
# SQL 注入
通过在 SQL 查询的内容中构造 SQL 语句,如对于
http://domain.com/?user=1
通过 URL 可知这是一个 GET 请求,用到了 user 参数。实际的 SQL 查询可能是:
SELECT * FROM users WHERE user_id = '1'
如果把请求连接换为:
http://domain.com/?user=1' order by 1#
则执行的 SQL 变成了:
SELECT * FROM users WHERE user_id = '1' order by 1#'
由于#后面的内容会作为注释,所以语法上是正确的,此时便完成了一次 SQL 注入。返回的结果会按 user_id 第一字段排行。
若继续更改 order by 后面的数字,再 4 的时候出错了,则说明该表中一共有三个字段,达到了猜测数据库内容的目的。
此外,还可以使用联合查询,直接查出表内的内容,如
http://domain.com/?user=1' union select database(),user()#
对应的 SQL 为:
SELECT * FROM users WHERE user_id = '1' union select database(),user()#'
将会返回数据库的名字和用户名
# 防范措施
SQL 预编译:
- 在服务器启动时,就将 SQL 语句的模板发送给 MySQL 服务器,并对模板进行编译,对于数据采用占位符
- 请求到来时,传送相应的参数,直接进行执行。避免了用户输入的数据成为查询逻辑的一部分
# CSRF
Cross-site request forgery 跨站请求伪造
CSRF 攻击是指:黑客诱导用户点击链接,打开黑客的网站,然后黑客利用用户目前的登录状态发起跨站请求。
在进入黑客的网站 B 后,对已登录的网站 A 发起请求,并会附带上对于网站 A 的cookie,来模拟用户的登录状态。
# 防范措施
# 设置 Cookie 的 SameSite 属性
SameSite 字段的取值有三种:
- Strict:只有在当前域名下的请求才能携带 Cookie
- Lax:只能在 get 方法提交表单或 a 标签发送 get 请求时允许携带 Cookie
- None:默认值,在任何情况都自动携带 Cookie
# 验证来源站点
根据请求头中的 origin 和 refer 验证请求来源。
但由于这两个字段可以伪造,所以有效性不高
# CSRF Token
后端返回的页面中,附带一个 token 字符串,浏览器再次发送请求时,必须携带这个 token 才有效。
因为第三方站点一般无法获得这个 token,因此会被服务器拒绝。
# XSS
Cross Site Scripting 跨站脚本,为了和 css 区分,叫它 xss
XSS 攻击是指浏览器中执行的恶意脚本,从而拿到用户信息并进行操作
可能造成的影响:
- 读取 cookie
- 监听用户行为,如用户输入的账号密码
- 修改 DOM 伪造登录表单
- 在页面中生成悬浮广告
XSS 攻击有三种实现方式:存储型、反射型、文档型
# 存储型
将脚本存储到了后端数据库,在页面渲染时直接执行。
常见场景:用户提交了一段 JS 而前后端没有做转义。
# 反射型
将恶意代码作为请求的一部分,如
http://domain.com?name=<script>alert("1")</script>
后端获得了 name 参数,然后将内容返回给浏览器,这部分内容就作为 HTML 的一部分解析,也就是进行了执行
# 文档型
不攻击服务端,而是在数据传输过程中进行劫持,直接修改 HTML 文档
# 防范措施
- 对用户输入内容进行转义
- 设置
Cookie
的HttpOnly
属性 - 浏览器的内容安全策略
# DDoS
分布式拒绝服务攻击
定义:在短时间内向服务器发送大量请求,耗尽服务器的资源,使正常的请求无法得到响应,造成网站瘫痪。
# 防范措施
- 拦截特征 IP 的请求。若攻击者的 IP 是有特征的,对其进行拦截即可
- 带宽扩容。容纳包括攻击请求的所有请求,则攻击自然无效
- 部署 CDN。将静态内容部署到 CDN,用户会访问 CDN 中的缓存,而不是直接向源服务器发送请求
# SYN 泛洪攻击
属于 DDoS 攻击的一种,通过向服务器放大量的 SYN 报文,使服务器打开大量的半连接,分配 TCB(Transmission Control Block 传输控制块),从而消耗资源,致使正常的链接请求无法被响应
# 防范措施
- 无效连接的监控释放:系统监视半开连接和不活动连接,达到一定阈值后进行释放。正常请求也可能受影响
- 延缓 TCB 分配(SYN Cookie):改变 TCB 的分配时间,初次收到 SYN 报文后,计算出一个 Cookie 值但不存储。当正式建立连接时才根据这个值校验后进行 TCB 的分配。
# 中间人攻击
Man-in-the-Middle Attack
攻击者和通信双方分别建立独立的联系,通信双方无法意识到两方的通信被人控制。
# 防范措施
使用特殊的身份认证方法(如 HTTPS 中的 SSL)