【问题标题】:How to parse a Javascript file and get all the used variables?如何解析 Javascript 文件并获取所有使用的变量?
【发布时间】:2015-07-22 23:10:53
【问题描述】:

我从不受信任的人那里收集了大量 Javascript 代码,并且必须将其集成到我的项目中。由于是不受信任的,我想检查它是否没有做一些讨厌的事情。

我主要关心的是代码使用的变量。 要检查它是否正常,我想解析所有代码并验证变量的名称。例如,所有变量都包含在window.sandboxedVariables 中。

是否可以解析 Javascript 代码(任何语言,但最好是 Javascript 或 bash)并获取所有变量的列表?是否可以对导入的库做同样的事情?

是否可以使用 Uglify ?我阅读了一些 API 文档,并没有发现任何具体的内容。

非常感谢!

【问题讨论】:

  • 每个上下文存在变量
  • window['ev' + 'al']('sandboxed' + 'Variables = null') 呢?
  • 不受信任的客户端代码无法访问不受信任的令牌或密码。只要您阻止 xss,这怎么可能成为问题?
  • 不要使用不受信任的代码......简单的解决方案。

标签: javascript uglifyjs


【解决方案1】:

假设您在谈论全局变量,您可以执行以下操作:

  • 克隆window对象
  • 加载/运行不受信任的脚本
  • window 对象与克隆对象进行比较
  • 将所有新发现的物品移至window.sandboxedVariables

但是,如果不受信任的脚本覆盖 window 的现有属性(变量)之一,这将不起作用。

【讨论】:

    【解决方案2】:

    eslint 是一个 JavaScript 源代码检查工具,可让您编写自定义插件。您应该能够编写一个满足您需求的插件。另外,插件可以用 JavaScript 编写。

    http://eslint.org/docs/developer-guide

    【讨论】:

      【解决方案3】:

      编写验证不受信任的 JavaScript 代码的算法是不可能的。你可以解析它,你可以在沙箱中运行它并分析它的动作。但是你永远不能确定你已经确定了它可能会做的所有事情,或者一旦你在真实环境中运行它可能会使用的每个变量。

      如果您不信任它,那么要么只在安全的沙箱中运行它,要么不要使用它。

      【讨论】:

        【解决方案4】:

        您可以使用Mozilla Rhino。它是一个用 Java 编写的 JavaScript 引擎。

        在这里您可以找到与您尝试做的类似的示例:

        http://ramkulkarni.com/blog/parsing-javascript-code-using-mozilla-rhino/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-10
          • 1970-01-01
          • 2013-08-24
          • 1970-01-01
          • 2016-03-13
          • 1970-01-01
          相关资源
          最近更新 更多