Web 安全知识笔记

Web 安全知识笔记

2023年09月16日 阅读:24 字数:2906 阅读时长:6 分钟

Web 应用中存在很多安全风险,常见的安全问题比如DDOS攻击、XSS攻击、CSRF 攻击等简介以及防御措施。

Web 应用中存在很多安全风险,这些风险会被黑客利用,轻则篡改网页内容,重则窃取网站内部数据,更为严重的则是在网页中植入恶意代码。常见的安全问题如下:

  • XSS 攻击:对 Web 页面注入脚本,使用 JavaScript 窃取用户信息,诱导用户操作。
  • CSRF 攻击:伪造用户请求向网站发起恶意请求。
  • 钓鱼攻击:利用网站的跳转链接或者图片制造钓鱼陷阱。
  • HTTP 参数污染:利用对参数格式验证的不完善,对服务器进行参数注入攻击。
  • 远程代码执行:用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。

1. DDOS攻击

DDoS(Distributed Denial of Service)攻击是一种旨在让目标系统、网络或服务不可用的恶意行为。这种攻击通常通过将大量的流量发送到目标系统上,超出其处理能力范围,从而导致系统瘫痪或无法正常运行。

DDoS攻击可以采用多种方式进行,其中包括以下几种常见的类型:

  • 带宽攻击:攻击者通过向目标系统发送大量的数据流量,耗尽目标系统的网络带宽,使得合法用户无法正常访问该系统。
  • 协议攻击:攻击者利用目标系统的协议漏洞,发送特制的恶意请求,使得目标系统在处理这些请求时产生问题,无法正常工作。
  • 连接攻击:攻击者通过消耗目标系统的连接资源,例如TCP连接,并使其无法接受新的连接请求,从而导致合法用户无法连接到系统。

为了有效防御DDoS攻击,以下是一些常见的防御措施:

  1. 流量过滤:使用防火墙、入侵检测系统(IDS)等设备来检测和过滤恶意流量,以防止其达到目标系统。
  2. 限制QPS:类似宝塔面板、CDN都可以限制QPS。
  3. 负载均衡:通过使用负载均衡设备,在多台服务器之间平衡流量分布,防止某一台服务器过载,以应对大规模的DDoS攻击。
  4. CDN(内容分发网络):使用CDN服务可以将网站的内容复制到多个位置的服务器上,当遭到DDoS攻击时,可以通过分散流量的方式减轻攻击对特定服务器的影响。
  5. 实时监测和响应:建立监测系统,实时检测流量异常,并迅速采取响应措施,例如封锁攻击源IP地址、向服务提供商报告等。

2. XSS攻击

XSS(Cross-Site Scripting)攻击是一种常见的网络安全威胁,攻击者通过在目标网页中注入恶意脚本代码,使得用户在浏览器中执行该恶意代码,从而实施攻击。XSS攻击可以分为三种类型:存储型XSS、反射型XSS和DOM-based XSS。

  1. 存储型XSS:攻击者将恶意脚本代码存储到目标网站的数据库中,当其他用户访问包含恶意代码的页面时,恶意代码被从数据库中提取并执行。

  2. 反射型XSS:攻击者构造一个包含恶意脚本代码的URL,诱使用户点击该URL,恶意代码被服务端接收后在响应中被反射到用户的浏览器中执行。

  3. DOM-based XSS:攻击者通过修改网页的DOM结构,执行恶意脚本代码,使其在用户的浏览器中执行。

以下是一些常见的XSS攻击防御措施:

  1. 输入过滤和验证:对于用户输入的数据,进行严格的过滤和验证。移除或转义特殊字符,例如<、>、"等,以防止恶意代码的注入。建议使用安全的编码技术,如HTML转义函数或白名单过滤。

  2. 输出编码:在将用户输入的数据显示到网页上时,进行适当的输出编码,以确保不会被浏览器误解为可执行的脚本。例如,使用HTML实体编码(如<代替<)来编码特殊字符。

  3. 内容安全策略(CSP):通过在网页的响应头中添加CSP策略,限制浏览器只执行特定来源的代码。这样可以有效防止恶意脚本的执行。

  4. HTTP-only Cookie:将敏感信息存储在HTTP-only Cookie中,该Cookie无法通过JavaScript访问,从而减少XSS攻击对用户身份验证的威胁。

使用js实现HTML转义

function HTMLEncode(html) {
  let temp = document.createElement("div");
  // div 也可替换pre
  temp.textContent != null
    ? (temp.textContent = html)
    : (temp.innerText = html);
  const output = temp.innerHTML;
  temp = null;
  return output;
}

使用xss工具库,配置指定的白名单来清理不受信任的 HTML

import xss from 'xss'

const options = {
  whiteList: {
    a: ["href", "title", "target"],
  },
};
const html = xss('<script>alert("xss");</script>', options)

3. CSRF 攻击

 CSRF(Cross-Site Request Forgery)攻击是一种利用用户在已经通过认证的网站上的身份进行非意愿的操作的攻击方式。攻击者通过诱使受害者在另一个网站上点击恶意链接或访问包含恶意代码的页面,来执行非法的操作,例如修改密码、发送付款请求等。

以下是一些常见的CSRF攻击防御措施:

  1. 随机令牌(CSRF Token):为了防止CSRF攻击,可以在用户的会话(Session)中生成一个随机令牌,并将该令牌包含在表单或请求头中。当提交表单或发送请求时,验证该令牌的有效性。攻击者无法获取受害者的令牌,因此无法伪造有效的请求。

  2. 同源检测:服务器可以在处理请求时进行同源检测,确保请求来自于相同的源(Origin)。同源检测验证请求的来源和目标URL的主机、协议、端口等是否一致。

  3. Referer检查:服务器可检查请求头中的Referer字段,验证请求来源是否与目标网站相同。这种方法不完全可靠,因为某些情况下Referer字段可能被篡改或者浏览器不发送Referer字段。

  4. Cookie设置:在Cookie中使用“SameSite”属性,限制Cookie只能在相同站点的请求中被发送,阻止跨站点的请求。

  5. 验证码:对于涉及用户隐私或敏感操作的请求,可以要求用户输入验证码,以增加使用者主动确认的环节,减少CSRF攻击的风险。

  6. 安全策略头(如CSP):通过使用安全策略头,如内容安全策略(CSP),限制页面中可以加载和执行的资源,从而减少恶意代码的注入和执行。

 

4. 钓鱼攻击

钓鱼攻击(Phishing Attack)是一种通过伪装成信任实体(如银行、社交媒体平台等)的方式,诱使用户透露个人敏感信息(如用户名、密码、银行账户等)的网络欺诈行为。攻击者通常会发送虚假的电子邮件、短信、弹窗等,通过

 等多种方式,引诱受害者点击恶意链接、图片和 iframe或下载恶意附件,并在伪造的网站上输入敏感信息。

以下是一些常见的钓鱼攻击防御措施:

  1. 警惕疑似邮件或信息:用户应注意电子邮件、短信等通信中的可疑链接、附件或请求。如果接收到涉嫌钓鱼的信息,请验证发送者的身份,并检查URL是否合法。

  2. 防垃圾邮件策略:使用反垃圾邮件技术来过滤和标记可能的钓鱼邮件,阻止它们进入用户的收件箱。

  3. 多因素身份验证:对于重要的账户,启用多因素身份验证(如短信验证码、令牌或生物识别等),提高账户安全性。

  4. 安全浏览器和防护软件:使用安全浏览器插件或防护软件来检测和拦截恶意网站和链接。

  5. HTTPS和安全连接:确保网站上敏感信息的传输是通过HTTPS加密连接进行的。

 

5. HTTP 参数污染

在 HTTP 协议中是允许同样名称的参数出现多次,攻击者通过传播参数的时候传输 key 相同而 value 不同的参数,从而达到绕过某些防护。

而HTTP参数污染(HTTP Parameter Pollution)是一种网络攻击方式,攻击者利用应用程序对URL、请求头或表单参数处理不完善的漏洞,传递恶意参数来干扰服务器端参数解析,并可能导致安全漏洞和应用程序错误。

以下是一些常见的HTTP参数污染防御措施:

  1. 输入验证和过滤:对于接收到的所有输入数据,包括URL参数、请求头和表单参数等,进行严格的验证和过滤。确保只接受预期的参数类型和格式,拒绝或过滤任何非法或异常数据。

  2. 参数顺序检查:在处理参数时,检查参数的顺序是否合理和符合预期。防止攻击者通过改变参数的顺序来影响应用程序行为。

  3. 参数编码和解码:对参数进行正确的编码和解码,以避免被当做特殊字符或控制字符进行处理,从而导致参数解析错误。

  4. URL参数白名单:对于URL参数,使用白名单的方式来限制可以接受的参数,而不是使用黑名单。只允许有明确目的的参数通过,其他参数将被拒绝。

  5. 请求头参数设置:对于请求头参数,必要时使用安全的默认值,以防止由于缺少或错误的参数而导致的应用程序错误。

 

6. XST 安全威胁

XST(Cross-Site Tracing)是一种安全威胁,它利用HTTP TRACE方法的不当使用,攻击者可以窃取用户的敏感信息或执行恶意操作。攻击者可以在受害者的浏览器和目标网站之间插入恶意脚本,并通过TRACE方法将受害者的敏感信息发送回攻击者的服务器。

以下是一些常见的XST安全威胁的防御措施:

  1. 禁用TRACE方法:由于TRACE方法通常用于调试和诊断,大多数应用程序并不需要它。因此,可以在Web服务器配置中禁用TRACE方法,以减少攻击面。

  2. 检测和阻止TRACE请求:在Web应用程序的前端或网络层,可以使用Web应用程序防火墙(WAF)或入侵检测系统(IDS)等工具来检测和阻止传入的TRACE请求。

  3. 输入验证和过滤:对于所有用户输入的内容(如URL参数、表单字段、请求头等),进行严格的验证和过滤。确保只接受预期的参数类型和格式,避免攻击者利用恶意代码。

  4. 输出编码:在将用户的敏感信息输出到响应中时,使用适当的输出编码技术,如HTML实体编码或URL编码。这样可以防止攻击者通过注入恶意脚本来利用XST漏洞。

 

参考资料:

  • https://www.eggjs.org/zh-CN/core/security

推荐阅读

恰饭区

评论区 (0)

0/500

还没有评论,快来抢第一吧