前端基础知识和必备技能 之 网站安全

68 阅读10分钟

📢 快来学习啦!

这篇是关于 网站安全 的总结~

常见的网络安全攻击方式

XSS(跨站脚本攻击)

XSS 是一种常见的网络安全漏洞,攻击者利用此漏洞在受害者的网页上注入恶意代码,从而窃取用户数据、操纵用户行为或向用户展示恶意内容。

危害

除了常见的如弹框等表面现象,XSS攻击 还可以实现更复杂的功能,如盗号、钓鱼欺诈、篡改页面、刷广告流量、内网扫描、网页挂马、挖矿、键盘监听、窃取用户隐私等。

攻击原理

XSS攻击 通过操纵易受攻击的网站,使其向用户返回 恶意JavaScript脚本。当恶意代码在受害者的浏览器内执行时,攻击者可以完全破坏他们与应用程序的交互,从而对用户造成危害。

攻击结果

  1. 获取页面的数据,如 DOMcookielocalStorage
  2. DOS攻击,发送合理请求,占用服务器资源,从而使用户无法访问服务器;
  3. 破坏页面结构;
  4. 流量劫持(将链接指向某网站);

攻击类型

XSS 可以分为存储型、反射型和 DOM 型

  • 存储型指的是恶意脚本会存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行。
  • 反射型指的是攻击者诱导用户访问一个带有恶意代码的 URL 后,服务器端接收数据后处理,然后把带有恶意代码的数据发送到浏览器端,浏览器端解析这段带有 XSS 代码的数据后当做脚本执行,最终完成 XSS攻击
  • DOM 型指的通过修改页面的 DOM 节点形成的 XSS
存储型 XSS 的攻击步骤:
  1. 攻击者将恶意代码提交到⽬标⽹站的数据库中。
  2. ⽤户打开⽬标⽹站时,⽹站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
  3. ⽤户浏览器接收到响应后解析执⾏,混在其中的恶意代码也被执⾏。
  4. 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。

这种攻击常⻅于带有⽤户保存数据的⽹站功能,如论坛发帖、商品评论、⽤户私信等。

反射型 XSS 的攻击步骤:
  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. ⽤户打开带有恶意代码的 URL 时,⽹站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
  3. ⽤户浏览器接收到响应后解析执⾏,混在其中的恶意代码也被执⾏。
  4. 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。

反射型XSS存储型XSS 的区别是:存储型XSS 的恶意代码存在数据库⾥,反射型XSS 的恶意代码存在 URL ⾥。

反射型XSS 漏洞常⻅于通过 URL 传递参数的功能,如⽹站搜索、跳转等。 由于需要⽤户主动打开恶意的 URL 才能⽣效,攻击者往往会结合多种⼿段诱导⽤户点击。

DOM 型 XSS 的攻击步骤:
  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. ⽤户打开带有恶意代码的 URL
  3. ⽤户浏览器接收到响应后解析执⾏,前端 JavaScript 取出 URL 中的恶意代码并执⾏。
  4. 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。

DOM型XSS 跟前两种 XSS 的区别:DOM型XSS攻击 中,取出和执⾏恶意代码由浏览器端完成,属于前端 JavaScript ⾃身的安全漏洞,⽽其他两种 XSS 都属于服务端的安全漏洞。

防御措施

  • 可以从浏览器的执行来进行预防,一种是使用纯前端的方式,不用服务器端拼接后返回(不使用服务端渲染)。另一种是对需要插入到 HTML 中的代码做好充分的转义。对于 DOM型 的攻击,主要是前端脚本的不可靠而造成的,对于数据获取渲染和字符串拼接的时候应该对可能出现的恶意代码情况进行判断。
  • 使用 CSP ,CSP 的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击。
  1. CSP 指的是内容安全策略,它的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截由浏览器自己来实现。
  2. 通常有两种方式来开启 CSP,一种是设置 HTTP 首部中的 Content-Security-Policy,一种是设置 meta 标签的方式 <meta http-equiv="Content-Security-Policy">
  • 对一些敏感信息进行保护,比如 cookie 使用 http-only,使得脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作。

CSRF(跨站请求伪造)

CSRF 指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。

CSRF 攻击的本质是利用 cookie 会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。

攻击原理

CSRF利用恶意Web程序,如特制图像标签、隐藏表单、AJAX请求等,在用户不参与甚至不知情的情况下运行,诱使用户执行他们不打算执行的操作。

危害

CSRF攻击对于企业和用户来说具有毁灭性的影响,因为它允许攻击者部分规避相同的原始策略,从而利用用户的身份执行恶意操作。

攻击类型

常见的 CSRF攻击 有三种:

  • GET 类型的 CSRF攻击,比如在网站中的一个 img 标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交。
  • POST 类型的 CSRF攻击,比如构建一个表单,然后隐藏它,当用户进入页面时,自动提交这个表单。
  • 链接类型的 CSRF攻击,比如在 a 标签的 href 属性里构建一个请求,然后诱导用户去点击。

防御措施

  • 进行同源检测:服务器根据 http 请求头中 origin 或者 referer 信息来判断请求是否为允许访问的站点,从而对请求进行过滤。
  • 使用 CSRF Token 进行验证:在请求中添加一个随机产生的Token,并在服务器端验证。
  • Cookie 进行双重验证:在客户端获取到 Cookie 后,将 Cookie 发送给服务器端,服务器端验证 Cookie 的合法性。
  • 在设置 cookie 属性的时候设置 Samesite ,限制 cookie 不能作为被第三方使用。

SQL注入攻击

  • 定义:SQL注入攻击是一种利用 Web应用程序中的SQL语句输入漏洞的攻击方式。
  • 攻击原理:攻击者通过在Web应用程序中输入恶意SQL语句来获取敏感数据、更改数据或执行其他恶意操作。这种攻击发生在 Web应用程序使用用户输入的数据来构建 SQL语句 的情况下。
  • 攻击方式:由于 Web应用程序没有正确过滤用户输入的数据,恶意SQL代码得以执行,导致数据泄露、篡改或执行其他未授权的操作。

HTTP挟持

  • 目的:以弹窗的形式在客户端展示宣传性广告或者直接显示某网站的内容。
  • 原理:在客户端与目的服务器所建立的专门的数据传输通道中,监视特定数据信息。如果满足条件,就会插入精心设计的网络数据,目的是让客户端程序解释“错误”的数据,进而展示宣传性内容。
  • 触发时机:HTTP劫持通常不是定时出现,而是在用户进行网络操作刚刚开始的时候,例如打开登录邮箱或访问网站还没完全打开时。

DNS挟持

  • 定义:DNS劫持是黑客在用户与DNS服务器之间插入自己,拦截并篡改用户的DNS解析请求的行为。
  • 攻击原理:当黑客发现请求的域名在他们的审查范围内时,他们可能会返回一个假的IP地址,或者干脆不返回任何响应,使用户被重定向到一个假的网站,或者无法访问他们想要访问的网站。
  • 影响范围:由于 DNS劫持通常只能在特定的被劫持的网络范围内进行,所以在此范围外的域名服务器(DNS)能够返回正常的IP地址。

这些攻击方式都对网络安全构成了严重威胁。为了防止这些攻击,网站管理员和开发者应采取一系列安全措施,如输入验证和过滤、使用 HTTPS协议、定期更新和修复漏洞、限制敏感数据的访问等。同时,用户也应保持警惕,注意识别和避免潜在的安全风险。

前端网站安全注意事项

以下是一些前端网站安全的主要方面:

输入验证和过滤

用户的输入可能包含恶意代码,如 SQL注入跨站脚本攻击(XSS)等。因此,对用户输入的数据进行验证和过滤是前端开发中必不可少的一环。这包括验证用户输入是否符合预期的格式和内容,并对可能的恶意输入进行过滤,以确保应用程序不会受到攻击。

使用安全的框架和库

为了提高网站的安全性,应选择使用经过验证和广泛使用的安全框架和库。这些框架和库经过了大量的实践和测试,能够提供更高的安全性和防护措施。同时,也需要及时更新这些框架和库的版本,以应对新出现的安全漏洞。

设置合适的访问权限

通过正确地配置用户权限,可以防止未授权的用户进行恶意操作、访问敏感信息或修改其他用户的数据。这包括限制用户对特定资源的访问权限,以及实施身份验证和授权机制。例如,设置合适的登录页面和强口令密码,并禁止直接访问某些目录或文件。

安全的数据传输

在网络应用程序中,安全的数据传输是非常重要的。HTTPS协议 通过使用加密技术来保护数据在传输过程中的安全性。前端开发人员应使用HTTPS协议 来保护敏感信息的传输,如用户登录凭据和支付信息。此外,还可以使用其他的加密技术,如 SSL证书 和 双因素身份验证,以进一步提高数据的安全性。