利用动态渲染引擎来控制Web应用
发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370
文章来源:EDI安全 01 前言 动态渲染是一种用于将预渲染的网站页面提供给爬虫的技术(例如Google搜索引擎,Slack或Twitter机器人等)。 动态渲染最流行的开源应用程序是Rendertron和Prerender。如果使用不当,两者都可能将漏洞引入网络。 我使用Rendertron中的一个漏洞来接管生产Web应用程序,并通过错误赏金计划赚了5,000美元。 02 介绍 如今,现代JavaScript框架已广泛用于网站开发。现在,我们有了PWA(渐进式Web应用程序)和SPA(单页应用程序),而不是纯HTML页面,它们在客户端浏览器中完成了大部分工作,并使用JavaScript即时生成了页面内容。 该技术具有许多优点,并且可以有效地创建流畅的UI和UX,但同时,它也不适合SEO,因为未开发爬虫和漫游器来呈现或理解JavaScript。帮助机器人获取有效HTML内容的常见方法之一是在服务器上的无头浏览器实例(例如Puppeteer或Playwright)中打开请求的页面,获取结果HTML,剥离不希望被抓取的部分,然后将其返回。这种方法称为动态渲染,是Google推广的一种可提供内容的方法。 我在对Node.js生态系统中的程序包进行安全性审查时遇到了这种类型的应用程序,以了解在生产中使用无头浏览器时可能出现的漏洞。我编写了Semgrep规则并大规模运行它们,以检测无头浏览器的可能易受攻击的用途。 这些规则可在以下Semgrep包中找到: https://semgrep.dev/p/headless-browser 这些Semgrep规则产生了许多结果以进行分类,在对它们进行调查之后,我发现大量使用无头浏览器的模块旨在帮助网站管理员进行动态渲染。 由于该概念的日益普及,我认为重要的是调查并了解在生产中使用动态渲染时可能出问题的地方。 这项研究的范围包括两种最流行的开源动态呈现应用,Rendertron和预渲染的,但所描述的攻击可以被应用到这种类型的其他应用程序,以及。我还将分享如何应用这些知识来接管一些curl请求的生产Web服务器并获得5,000美元的赏金。 03 结构 如果网页是在客户端上动态生成的,但需要由搜索引擎正确索引,则通常的方法是捕获来自搜寻器或漫游器的请求,将其呈现在服务器端,并输出包含所有内容的漂亮HTML。该流程通常如下所示: Web服务器通过检查User-Agent标头(在某些情况下为URL查询)来检测爬网程序。 请求被路由到渲染应用程序。 呈现应用程序运行无头浏览器并打开原始请求的URL,该URL将呈现页面,就好像用户使用浏览器查看了该页面一样。 生成的HTML被剥离