CSInternet14
网络攻击及解决方案汇总
1.DNS劫持
DNS劫持就是黑客劫持了DNS服务器,篡改了DNS解析结果,将client请求的域名解析到错误的IP地址上,让真实服务器拿不到请求,更多发生在诱导、钓鱼、广告植入、诈骗等诸多场景。
当我们访问网站的时候, 实际上是会先进行域名解析得到网站服务器的 IP 地址,然后才进行后续的访问。DNS劫持利用了这个过程中的漏洞,攻击者在DNS服务器上篡改DNS解析结果,将域名解析到攻击者控制的恶意服务器上,这时候我们访问的域名就被重定向到恶意网站上。
2.DNS污染
DNS污染是一种让一般用户由于得到虚假目标主机 IP 而不能与其通信的方法,是一种 DNS 缓存投毒攻击(DNS cache poisoning)。
其工作方式是:由于通常的 DNS 查询没有任何认证机制,而且 DNS 查询通常基于的 UDP 是 无连接不可靠 的协议,因此 DNS 的査询非常容易被篡改。通过对 UDP 端口 53 上的 DNS 查询进行入侵检测,经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。
目前一些在被禁止访问的网站基本都是通过DNS污染来实现的,例如 YouTube、Facebook 等网站。中国大陆的网络流量到国外的请求需要经过由中国政府控制的网络节点和设备。当我们尝试访问某些被屏蔽的网站(如YouTube、Google)时,系统会检测到这些域名请求,然后返回错误或虚假的IP地址,导致连接失败。这种技术实现是由负责互联网管理的政府机构统一部署的,主要是通过”防火长城”(Great Firewall,简称GFW)这一系统来实施。
解决办法:
1.绕过被污染的非权威 DNS 服务器,直接访问干净的公共 DNS 服务器。(当然,如果还是想在国访问国外网站,靠更换权威域名服务器也是行不通的,因为国内的运营商发现你的请求的数据是海外网站,也会禁止访问喵~)
2.在本机直接绑定 hosts,绕过 DNS 解析过程。(但由于 IP 地址会变更,故本机的 hosts 也需要不断更新) (不过知道国外一些网站的 IP但还是访问不了,这也是由于链路上某些设备发现这是被禁止的ip 而被拦截了。)
看到这里聪明的小朋友就要问了:那DNS劫持和DNS污染的区别是什么呢?问得好!
- 共同点:都是攻击dns 服务器,结果导向都是访问非法的网站。
- 不同点:dns 劫持影响会比较大一点,可能所有的 dns 解析都是错误的,dns 污染一般是针对某个特殊的网站进行污染,因为他是监听目标 ip,发现是这个才返回一个虚假的目标主机 ip。
你问那怎么样才能访问外网?下一篇我们会讲到的。😋
3.DDOS攻击
DDOS (Distributed Denial of Service),分布式拒绝访问攻击就是用大量的僵尸计算机对服务器发送大量的请求,让服务器的带宽、CPU和内存耗尽,让服务器超载后,无法再对外提供正常的服务。
DDOS 攻击大体分为网络层攻击和应用层攻击,攻击应用层的方式比如有DNS洪水攻击,攻击传输层的方式比如有SYN 洪水攻击、UDP洪水攻击。
可以通过这几个方面防御 DDOS 攻击:(前两条客户端角度,第三条服务端角度)
- 限制单个 IP 地址的请求频率,并且对异常流量的 IP 地址,拉黑名单,配置防火墙规则,阻止恶意流量请求。
- 增加用户验证机制,使用验证码、人脸识别等方式,增加用户验证的难度,减少恶意请求的影响。
- 花钱买可靠的DDoS防护服务提供商,他们具备强大的网络基础设施和专业的防护技术,能够识别和过滤掉恶意流量,确保正常的服务运行。
4.XSS攻击
XSS 攻击全称 跨站脚本攻击(Cross-Site Scripting),是一种代码注入攻击。
- 攻击方法:攻击者利用网页开发时留下的漏洞,通过巧妙的方法在目标网站 HTML 页面中注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
- 本质:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
攻击步骤大致分为四步:
1.攻击者将恶意脚本代码上传或存储到漏洞服务器
2.服务器把恶意脚本保存到服务器
3.当正常客户访问服务器时,服务器会读取恶意数据并且直接使用
4.服务器会返回含有恶意脚本的页面
根据攻击的来源,XSS 攻击可分为 反射型、存储型 和 DOM-Based 型三种。
| 类型 | 存储区( 恶意代码存放的位置 ) | 插入点(由谁插入) |
|---|---|---|
| 反射型 | URL,例:搜索栏键入脚本 | HTML |
| 存储型 | 服务端数据库,例:评论区恶意代码 | HTML |
| DOM-Based 型 | 服务端数据库 / 客户端存储 / URL | 前端 JavaScript |
实际案例:
- 譬如发帖中发出包含恶意代码的内容,其他客户端访问到该内容后,满足特定条件后条件即触发。
- 需要后台不过滤信息,并且前端展示时也不过滤信息的内容
注意:这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
要防止 XSS 攻击的话,可以通过这些方式:
- 输入验证和过滤:过滤一些特殊的字符,比如 javascript 脚本中的<>进行转移再进行存储,这样就能有效的进行 xss 攻击的预防。
- 使用HTTP-only Cookie:将敏感信息存储在HTTP-only Cookie中,限制JavaScript的访问权限,防止恶意脚本窃取用户的Cookie信息。(HttpOnly 是一个设置在 HTTPcookie 中的标记,用于增强cookie 的安全性。当服务器向客户端设置了一个 HttpOnlycookie 后,这个 cookie 将只能通过 HTTP 协议进行访问,而不能通过 JavaScript 脚本来访问。)
5.CSRF攻击
CSRF(Cross-Site Request Forgery) 叫跨站点请求伪造攻击,攻击者通过跨站请求,以合法的用户身份进行非法操作,如转账交易、发表评论等。其核心是利用了浏览器 Cookie 或服务器的 Session 策略,盗取用户的身份信息。
在打开 A网站 的情况下,另开 Tab页面打开恶意网站B,此时在 B页面的恶意意图 下,浏览器发起一个对网站A的HTTP 请求,因为之前 A网站 已经打开了,浏览器存有 A 网站 中的 Cookie 或其他用于身份认证的信息,这一次被 恶意意图的请求,将会自动带上这些信息,这将会导致身份劫持,造成并非本人意愿的操作结果。
防御 CSRF 攻击的话,可以有这些方式:
- 同源检测:在服务器端对请求进行同源检测,只接受来自同一域名下的请求。这可以通过检查请求头中的Referer字段或者Origin字段来实现。
- 使用验证码:对于敏感操作,要求用户输入验证码进行验证,以防止自动化脚本发起的恶意请求。
- 使用CSRF令牌:在用户执行敏感操作时,要求用户提交一个CSRF令牌。该令牌是一个随机生成的字符串,存储在用户的会话中,并且在每个请求中都要验证该令牌的有效性。攻击者无法伪造正确的CSRF令牌,从而防止CSRF攻击。这也是目前使用最多的方法。
6.SQL注入攻击
SQL注入攻击指的是攻击者在 HTTP 请求中注入恶意 SQL 命令,服务器用请求参数构造数据库 SQL 命令时,恶意SQL 被一起构造,并在数据库中执行,以便得到数据库中的感兴趣的数据或对数据库进行读取、修改、删除、插入等敏感的操作,从而导致数据被随意篡改。
以下时两个例子的对比:
1 | // 不安全的方式(容易被注入) |
预防SQL注入攻击,可以通过这几个方式:
- 使用参数化查询或预编译语句:使用参数化查询或预编译语句来构建和执行SQL查询。这样可以将用户输入的数据作为参数传递给查询,而不是将其直接拼接到SQL语句中,参数化查询可以防止恶意代码的注入。
- 输入验证和过滤:对用户输入的数据进行验证和过滤,确保只接受合法的输入,可以使用白名单过滤、正则表达式验证或者编码转义等技术来防止恶意代码的注入。
- 最小权限原则:在数据库中为应用程序使用最小权限的数据库账户,这样即使发生SQL注入攻击,攻击者也只能在该账户的权限范围内进行操作,减少损失。





