wpf - Microsoft 脚本控制 - 阻止脚本访问系统?

标签 wpf vb.net security

我正在开发一个商业 VB.net WPF 应用程序,该应用程序需要用户生成的脚本来控制应用程序在用户之间共享。到目前为止,我遇到的无需编写自己的解析器即可完成此任务的最佳方法是使用 Microsoft 脚本控件。

看来,通过此控件运行的 VBScript 和 JScript 都可以访问 wscript,因此出于明显的安全原因,其功能过于强大,无法在程序员和非技术用户之间共享。

我曾考虑过尝试使用某种正则表达式解析或其他方法来过滤掉危险的脚本,但这似乎风险太大且容易规避。

那么,是否有某种方法可以使用此控件,但阻止其访问系统,以便它只能用于控制我给它的对象?如果没有,有人可以推荐更好的方法吗?

我并不特别介意现阶段脚本采用什么语言,尽管有多个选项会很好。

编辑:我的结论是,该控件对此功能过于强大,因为以下 JScript 代码在使用控件的 .AddCode 和 .Run 方法调用时成功启动记事本。

function test(){
    var shell = new ActiveXObject("WScript.shell");
    shell.run("notepad.exe", 1);
}

感谢您的帮助,
萨姆。

最佳答案

如果您只需要终止作为系统入口点的 ActiveXObject 功能,您可以在提供给脚本控件的代码中默默地附加一些行,例如:

ActiveXObject = null; // add this silently

function test(){
    var shell = new ActiveXObject("WScript.shell"); // this will now fail
    shell.run("notepad.exe", 1);
}

当然,如果你仍然需要向用户提供一些功能,那么你需要提出某种 API,使用 AddObject 函数(参见 How To Use the AddObject Method of the Script Control ),用户将像这样使用它:

ActiveXObject = null; // add this silently

function test(){
   // this is a controlled method, because I have added a MyAPI named object
   // using AddObject, and this object has a OpenNotepad method.
   MyAPI.OpenNotepad();
}

PS:WScript 是 ActiveX 脚本主机,因此无法从脚本控件访问它。

PS2:此 hack 并不适用于所有脚本控制底层语言。它可以在 JavaScript 中运行,但不能在 VBScript 中运行。

关于wpf - Microsoft 脚本控制 - 阻止脚本访问系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8013413/

相关文章:

c# - 检测屏幕键盘是否打开

c# - slider - 无需单击拇指即可更改值

c# - 每次创 build 置时如何更改设置

Jquery DateTimePicker 不可见

java - "java.security.AccessControlException: access denied"执行签名的 Java Applet

c# - 默认的 WPF 控件模板在哪里?

database - VB.NET - .accdb 数据库不保存更改

c# - 当列名有空格时从 DataTable 中的字段获取值

php - 如何保护隐藏字段数据不被更改

php - 可利用的 PHP 函数