📜  什么是跨站脚本(XSS)?

📅  最后修改于: 2021-10-22 03:37:04             🧑  作者: Mango

跨站点脚本 (XSS) 是 Web 应用程序中的一个漏洞,它允许第三方代表 Web 应用程序在用户的浏览器中执行脚本。跨站脚本攻击是当今网络上最普遍的漏洞之一。针对用户利用 XSS 会导致各种后果,例如帐户泄露、帐户删除、权限提升、恶意软件感染等等。

在最初的日子里,它被称为 CSS,但它并不完全是今天的样子。最初,发现恶意网站可以通过将其他网站的响应嵌入 iframe、运行脚本和修改页面内容,利用 JavaScript 从其他网站的响应中读取数据。当时它被称为 CSS(跨站点脚本)。当 Netscape 引入同源策略并且跨站点脚本被限制启用跨源响应读取时,定义发生了变化。很快,有人建议将此漏洞称为 XSS,以避免与级联样式表 (CSS) 混淆。

当网站在将其插入响应之前没有正确处理用户提供给它的输入时,就会出现 XSS 的可能性。在这种情况下,可以给出精心设计的输入,当嵌入到响应中时,它充当 JS 代码块并由浏览器执行。

根据上下文,有两种类型的 XSS——

  1. 反射型 XSS:
    如果每次执行都必须提供输入,则这种 XSS 被称为反射。这些攻击主要是通过直接向受害者提供有效载荷来进行的。受害者请求一个包含有效负载的请求的页面,有效负载作为脚本嵌入在响应中。反射型 XSS 的一个例子是搜索字段中的 XSS。

  2. 存储的 XSS:
    当包含有效负载的响应以这样一种方式存储在服务器上时,脚本在每次访问时都会执行而不提交有效负载,那么它被识别为存储型 XSS。存储型 XSS 的一个例子是评论线程中的 XSS。

还有另一种类型的 XSS,称为基于 DOM 的 XSS ,它的实例要么被反射,要么被存储。当用户提供的数据在没有适当清理的情况下提供给 DOM 对象时,就会出现基于 DOM 的 XSS。
下面是一个易受 XSS 攻击的代码示例,注意变量fistnamelastname

Please enter both fields...";       
 
       }
 
       else            
       { 
 
           echo "Welcome " . $firstname. " " . $lastname;   
 
       }
   }
   ?>

用户提供的输入直接添加到响应中,无需任何完整性检查。攻击者输入类似 –


它将被呈现为 JavaScript。 XSS(以及任何安全问题)有两个方面——

  1. 开发商:
    如果您是开发人员,重点将是安全开发,以避免产品中出现任何安全漏洞。您无需深入研究漏洞利用方面,只需使用工具和库,同时应用安全研究人员规定的安全代码开发最佳实践。

    开发人员的一些资源是 –

    一种)。 OWASP 编码项目:它是一个用Java编写的库,由 Open Web 应用程序安全项目 (OWASP) 开发。它是免费、开源且易于使用的。

    b)。 “X-XSS-Protection”标头:该标头指示浏览器激活内置的 XSS 审计器,以识别和阻止针对用户的任何 XSS 尝试。

    C)。 OWASP 的 XSS 保护备忘单:该资源通过适当的示例列出了在开发过程中要遵循的规则。这些规则涵盖了开发人员可能会遗漏一些可能导致网站容易受到 XSS 攻击的各种情况。

    d)。内容安全策略:它是针对类似 XSS 问题的独立解决方案,它指示浏览器有关“安全”来源的信息,除此之外,不应从任何来源执行脚本。

  2. 安全研究人员:
    另一方面,安全研究人员想要类似的资源来帮助他们寻找开发人员变得糟糕并留下切入点的实例。研究人员可以利用——

    一种)。备忘单 –
    1. OWASP 的 XSS 过滤规避备忘单。
    2. Rodolfo Assis 的 XSS 备忘单。
    3. Veracode 的 XSS 备忘单。

    b)。实践实验室——
    1.bWAPP
    2. DVWA(该死的易受攻击的 Web 应用程序)
    3.提示.ml
    4. CTF

    C)。报告 –
    1. Hackerone Hactivity
    2. Jason Haddix、Geekboy、Prakhar Prasad、Dafydd Stuttard(Portswigger)等知名安全研究人员的个人博客。