用JavaScript实现的简单,安全的脚本语言?

时间:2010-10-18 02:49:34

标签: javascript interpreter scripting-language

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

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

以下是脚本需要执行的示例任务,取自Wikipedia's procedure for requesting article deletion

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

3 个答案:

答案 0 :(得分:3)

以下是javascript中的Tcl实现:Tcl in Javascript

以下是来源:tcl.js

此处的代码在浏览器中实现了一个实时控制台,可以使用:A little tcl.js console

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

你可以只是沙盒;也就是说,在几个关键变量中作用域,以便用户的代码无法访问不安全的对象。

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

尽管如此,允许用户代码发出ajax请求本身就是不安全的。如果这就是所要求的,我会重新考虑项目的完整性。