跳到主要内容

了解web攻击和预防策略

· 阅读需 13 分钟
鲸落

常见的web攻击

  • SQL 注入攻击:防范策略是使用参数化查询,而不是拼接字符串,以及使用预编译语句来防止 SQL 注入攻击。
  • 跨站脚本攻击 (XSS):防范策略是过滤用户输入,确保不包含任何恶意代码,以及使用 HTTPOnly 标记来防止 XSS 攻击。
  • 跨站请求伪造 (CSRF):防范策略是使用一个验证令牌来校验请求来源,以及使用验证码和验证问题来防止 CSRF 攻击。
  • DDos 攻击:防范策略是使用网络防火墙,限制访问频率,以及采用智能分析技术来检测恶意行为。
  • 文件上传漏洞

sql注入攻击

SQL注入攻击是一种非常常见的Web攻击,它指的是攻击者在Web表单中输入恶意的SQL代码,并将其提交到数据库服务器。如果数据库服务器不能正确处理这些恶意的SQL代码,那么攻击者就可以访问、修改或删除服务器上的数据

SQL 注入攻击的过程如下

  1. 应用程序接收用户的输入,构造 SQL 查询或命令。
  2. 攻击者在输入中注入恶意的 SQL 代码,例如通过输入框提交 ' OR 1=1 -- 这样的字符串。
  3. 应用程序在构造 SQL 查询或命令时未正确对用户输入进行过滤或转义,导致恶意的 SQL 代码被执行。
  4. 攻击者成功执行了非法的数据库操作,如查询、修改、删除或绕过认证获取敏感信息。

如何预防SQL注入攻击

  1. 对用户输入进行过滤。
  2. 在SQL语句中使用参数化查询,而不是字符串拼接。
  3. 使用专业的Web安全测试工具来进行安全检查和测试。
  4. 设置防火墙并定期进行维护。
  5. 定期备份数据库,以便在发生错误时可以恢复数据。
  6. 定期对应用程序和数据库进行安全审计,以识别潜在的弱点和漏洞。

跨站脚本攻击 (XSS)

XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和CSS重叠,所以只能叫 XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。

恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。

XSS 攻击可以分为三种类型:

  1. 反射型 XSS(又称非持久型XSS):攻击者构造一个包含恶意脚本的 URL,诱使用户点击该 URL,服务器接收到请求后,将恶意脚本作为响应的一部分返回给用户的浏览器执行。
  2. 存储型 XSS(又称持久型XSS):攻击者将恶意脚本存储到目标网站的数据库中,当用户访问包含恶意代码的页面时,恶意代码会从服务器传送到用户的浏览器执行。
  3. DOM 型 XSS:攻击者通过修改页面的 DOM 结构,篡改页面的行为,使恶意代码在用户浏览器中执行。

反射型XSS

这类攻击方式往往不是攻击者主动去攻击用户,主要借助URL来实施,诱导用户点击,把用户的数据发送给攻击者。 最常见的就是:空间相册,空间留言,假冒LOL官网进行抽奖等,需要登陆QQ账号密码的类型。(记得看域名辨真伪,尽量扫码登陆)

攻击者可以直接通过 URL (类似:https://xxx.com/xxx?default=<script>alert(document.cookie)</script>) 注入可执行的脚本代码。不过一些浏览器如Chrome其内置了一些XSS过滤器,可以防止大部分反射型XSS攻击。

反射型 XSS 漏洞攻击有以下几点特征:

  • 即时性,不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,拿到用户隐私数据。
  • 攻击者需要诱骗点击,必须要通过用户点击链接才能发起
  • 反馈率低,所以较难发现和响应修复
  • 盗取用户敏感保密信息

存储型XSS

存储型 XSS 漏洞,一般存在于 Form 表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在对方数据库里,反射型 XSS 的恶意代码存在 URL 里

主要注入页面方式和非持久型 XSS 漏洞类似,只不过持久型的不是来源于 URL、forms 等,而是来源于后端从数据库中读出来的数据 。持久型 XSS 攻击不需要诱骗点击,黑客只需要在提交表单的地方完成注入即可,但是这种 XSS 攻击的成本相对还是很高。

攻击成功需要同时满足以下几个条件:

  • POST 请求提交表单后端没做转义直接入库。
  • 后端从数据库中取出数据没做转义直接输出给前端。
  • 前端拿到后端数据没做转义直接渲染成 DOM。

持久型 XSS 有以下几个特点:

  • 持久性,植入在数据库中
  • 盗取用户敏感私密信息
  • 危害面广

DOM型XSS

通过修改页面的DOM节点形成的XSS。从效果上看,属于反射型XSS,但其通过修改DOM,直接在页面上操作,不经过后端,不经过数据库。

比如下方的代码的image_url是通过浏览器url上去拿的,然后通过img渲染,但是如果我在url后加上" onerror=“我的js代码” " > 让img标签加上onerror属性,然后发给需要攻击的用户,用户点开后,因为src加载失败,所以执行onerorr,那么用户就被攻击了。

// 正常
<script>const image_url = "..images.ac.qq.com/....."</script>
<div>
<img src="{image_url}">
</div>

// 异常
<script>
const image_url = " onerror="console.log(document.cookie)"
</script>
<div>
<img src="" onerror="console.log(document.cookie)"">
</div>

防范

为了防范 XSS 攻击,可以采取以下防范措施:

  1. 输入验证和过滤:对用户输入的数据进行验证,确保输入符合预期格式,过滤掉特殊字符和敏感代码。
  2. 输出编码:在将用户输入的数据输出到页面时,进行合适的编码,如 HTML 转义,以确保恶意代码不会被执行。
  3. 使用 HTTP-only Cookie:将敏感信息存储在 HTTP-only Cookie 中,避免通过 JavaScript 访问敏感信息。
    • Http头部通过设置 set-cookie 阻止xss通过返回的html中添加js脚本访问cookie,其有俩属性
      • httponly:禁止js脚本访问cookie( httpOnly只能防御xss攻击后续对cookie的操作,并不能防御xss攻击)
      • secure : 浏览器请求为 https 时才发送cookie
  4. Content Security Policy (CSP):使用 CSP 设置白名单,限制页面加载的资源来源,防止恶意脚本的注入。
  5. 防止 DOM 操作:避免使用 innerHTMLeval 等可以执行脚本的方法,优先使用更安全的 DOM 操作方法。
  6. 使用安全的框架和库:选择安全性较高的前端框架和库,它们通常会内置一些防范 XSS 攻击的机制。
  7. 定期更新和修复:及时关注安全漏洞和最佳实践,持续更新和修复应用程序中的安全问题。

总之,防范 XSS 攻击需要从用户输入、数据输出、DOM 操作和安全意识等多个方面综合考虑,确保应用程序的安全性。

跨站请求伪造 (CSRF)

CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的Web攻击,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。

CSRF攻击的原理

  • 受害者登录a.com,并保留了登录凭证(Cookie)
  • 攻击者引诱受害者访问了b.com
  • b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie
  • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
  • a.com以受害者的名义执行了act=xx
  • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作

防范 CSRF 攻击可以遵循以下几种规则

  • Get 请求不对数据进行修改
  • 不让第三方网站访问到用户 Cookie
    • 启用 SameSite Cookie 属性:设置 Cookie 的 SameSite 属性为 Strict 或 Lax,限制 Cookie 的跨站点访问,防止跨站点请求携带 Cookie。
  • 阻止第三方网站请求接口
  • 请求时附带验证信息,比如验证码或者 Token

DDos 攻击 DDos 攻击(分布式拒绝服务攻击)

DOS(Denial of Service)攻击,即拒绝服务攻击,是一种网络攻击方式,旨在使目标系统或网络资源无法提供正常的服务,从而导致服务中断或不可用。

DOS攻击的原理是通过向目标系统发送大量的请求或占用系统资源的行为,使系统超出其处理能力范围,导致系统性能下降或崩溃,无法正常为合法用户提供服务。DOS攻击通常是有意的、有目的性的攻击,旨在破坏或干扰目标系统的正常运行。

常见的DOS攻击方式包括

  1. 网络层攻击:包括大流量洪泛攻击(如SYN Flood、UDP Flood、ICMP Flood等),通过向目标系统发送大量伪造的网络请求,耗尽目标系统的带宽、网络资源或处理能力。
  2. 应用层攻击:包括HTTP请求洪泛(HTTP Flood)、Slowloris攻击等,通过向目标系统发送大量的应用层请求,占用服务器的连接数、线程或资源,导致系统无法响应合法用户的请求。
  3. 分布式拒绝服务攻击(DDoS):是一种通过控制多个分布在不同地理位置的傀儡主机同时对目标系统发动DOS攻击的方式,以增加攻击的规模和效果。

为了防范DOS攻击,可以采取以下防范措施:

  1. 增加带宽和系统资源:提高网络带宽和服务器的处理能力,以抵御大流量的攻击。
  2. 使用防火墙和入侵检测系统(IDS):配置防火墙规则,过滤恶意流量,及时检测和拦截DOS攻击流量。
  3. 负载均衡和流量分流:通过使用负载均衡设备和流量分发技术,将流量分散到多个服务器上,减轻单一服务器的压力。
  4. IP封堵和黑名单:识别并封锁攻击者的IP地址,限制其访问目标系统或网络。
  5. 限制并发连接和请求频率:设置系统的连接数和请求频率限制,防止恶意用户发起大量请求。
  6. 使用反向代理和缓存服务器:通过反向代理和缓存服务器缓存静态内容,减轻对后端服务器的压力。
  7. 实施流量分析和监测:定期进行流量分析和监测,及时发现和应对异常流量和攻击行为。

文件上传

文件上传漏洞是一种常见的Web安全漏洞,指的是攻击者利用应用程序的漏洞,通过上传恶意文件到目标服务器,从而执行恶意代码或获取未授权的访问权限

文件上传漏洞的原理是,应用程序在接收用户上传文件时,未进行充分的验证和过滤,导致攻击者可以上传包含恶意代码的文件。攻击者可以利用这个漏洞来执行各种恶意行为,例如:

  1. 执行恶意代码:攻击者上传包含恶意脚本的文件,当其他用户访问这个文件时,恶意脚本会在其浏览器中执行,从而导致恶意操作,例如窃取用户登录凭证、篡改页面内容等。
  2. 上传恶意文件:攻击者可以上传包含恶意软件、病毒、木马程序等的文件到服务器,从而感染服务器或其他用户的设备。
  3. 绕过访问控制:攻击者可以上传包含恶意代码的文件来绕过应用程序的访问控制机制,获取未授权的访问权限,例如上传恶意的.htaccess文件绕过目录访问限制。

为了防止文件上传漏洞,可以采取以下防范措施:

  1. 文件类型验证:限制上传文件的类型,只允许上传安全的文件类型,对于不安全的文件类型可以禁止上传或进行严格的检查和处理。
  2. 文件扩展名验证:对上传文件的扩展名进行验证,防止攻击者通过修改文件扩展名来绕过验证。
  3. 文件内容检查:对上传的文件进行内容检查,确保文件不包含恶意代码或病毒。
  4. 文件大小限制:限制上传文件的大小,避免上传过大的文件导致服务器资源耗尽或拒绝服务。
  5. 安全的存储和访问控制:确保上传的文件存储在安全的位置,并设置适当的访问权限,防止恶意文件的执行或访问。
  6. 输入验证和过滤:对用户输入进行充分的验证和过滤,防止恶意输入绕过文件上传的安全机制。
  7. 安全的编程实践:开发人员应遵循安全的编程实践,如使用安全的文件处理函数、避免直接拼接用户输入等,以减少文件上传漏洞的风险。

参考链接

常见Web攻击及解决方案 - 掘金 (juejin.cn)

💣深入Web安全(攻击篇) - 掘金 (juejin.cn)

Loading Comments...