6

我想实现一种脚本语言来帮助部分自动化公共 wiki 上的某些任务。我无法在服务器上安装诸如Google Caja之类的任何东西或修改 wiki 软件本身,但我可以安装 JavaScript 代码以供客户端执行。因为我的意图是允许普通用户创建和发布脚本,所以使用 JavaScript 本身是不安全的,并且可能导致帐户泄露。

是否存在这样的脚本语言实现,或者如果不存在,是否相对容易创建?我的重点是易于文本处理、Ajax 请求和实现。

以下是脚本需要执行的示例任务,取自Wikipedia 请求删除文章的过程

  1. 向用户询问 wiki 页面的名称以及删除它的充分理由。
  2. 获取该页面的源代码,在顶部添加删除通知,然后保存新文本。
  3. 创建一个包含删除原因的新页面(其名称基于第一页的名称)。
  4. 获取编辑页面的用户列表并通知第一个用户(同样,通过编辑特定页面)他创建的页面即将被删除。
4

3 回答 3

3

这是 javascript 中 Tcl 的实现:Tcl in Javascript

这是来源:tcl.js

这是在您的浏览器中实现实时控制台的代码:A little tcl.js console

Tcl 可能不是你的一杯茶,但实现看起来相当简单明了。这主要是因为 tcl 本身就是这么简单的语言。您可以使用它来获取有关如何实现变量和函数的想法。

提示:在 tcl 中,控制结构是函数,因此查看内置函数的实现位置以了解 for、while 和 foreach 的实现。

于 2010-10-29T02:13:43.350 回答
2

Douglas Crockford 的ADsafe应该是 JavaScript 的一个安全子集。

它由一个运行时库(缩小约 20 KB)和一个验证器(包含在JSLint中)组成。如果 Crockford 从许可证中删除“软件应用于善,而不是作恶”,则这两个组件都将是与 GPL 兼容的开源程序。

因为 JSLint 是一个 JavaScript 程序,它可以完全在 Web 浏览器中验证用户脚本。这与用 Java 编写的 Google Caja 形成鲜明对比。

于 2010-10-29T01:52:21.180 回答
0

你可以只是沙盒;也就是说,在几个关键变量的范围内,这样用户的代码就无法访问不安全的对象。

var execSandboxedJS = function (jsCode) {
    var window = document.getElementById('myRootElement');
    var document = window;
    eval(jsCode);
};

但是,允许用户代码发出 ajax 请求本身就是不安全的。如果需要的话,我会重新考虑该项目的合理性。

于 2010-10-18T06:33:31.050 回答