有人在nsf中使用javascript原型后,如何在Domino服务器中清理SSJS?

约翰·埃查瓦里亚(Johann Echavarria)

有人在nsf中使用javascript原型后,如何在Domino服务器中清除SSJS(服务器端Javascript)?

马克·罗登(Mark Roden)发现了XPages SSJS的一个巨大缺陷:(感谢大卫·李迪(David Leedy)告诉我这件事,并向我展示了这篇文章)。

如果您具有以下SSJS代码:

var dummyObj = {}
dummyObj.prototype.NAME = "Johann"

XPages SSJS不在乎您是否使用var(var表示变量必须是本地变量),它会使dummyObj.NAME在整个服务器中可见,值为Johann因此,如果同一台服务器中的另一个nsf使用具有相同名称的var,它将继承整个原型:

var dummyObj = {}
println(dummyObj.NAME) /*prints "Johann" */ 

这是一个巨大的错误(一个使XPages SSJS IMO不可靠的错误)。即使您根本不使用原型,但如果他的应用程序中的其他人执行以下操作:

String.prototype.split = function(){ return "I broke this method" }

它将破坏使用无辜split()的同一服务器上的所有应用程序

因此,问题是:如果有人“错误地”在NSF中编写了以下SSJS(XPages服务器端Javascript):

String.prototype.split = function(){ return "I broke this method" }

如何将String.prototype.split()修复为其原始值?

正如Mark Roden所说,重新启动HTTP任务并不能解决它。

//////////////////////////////////////////////////// /////////

编辑1:为什么我认为这是一个巨大的错误:

我是Javascript迷,但是恕我直言@MarkyRoden发现了SSJS中的一个巨大错误。垫片和填充料并不是真正的主要问题。众所周知,Eval是一种不好的做法,但是原型对象是基本Javascript的基本元素。这是将方法添加到Javascript类的标准和首选方式,继承和各种OOP东西也需要它因此,您将需要在服务器级别使用某种命名空间,以避免发生冲突。所有这一切确实很糟糕,但是一个巨大的问题是,一个应用程序中只有一行代码会破坏服务器中的所有应用程序。是的,您可以信任您的开发人员,但是其中一位开发人员可能会错误地写一条糟糕的话,而且Domino服务器可以包含来自不同软件供应商的数百个应用程序。在代码审查中设置责任不是一个可靠的过程。也许是时候在SSJS中使用真正的JavaScript引擎了,例如V8,Spidermonkey,Chakra或Rhino。作为一种解决方法,我正在考虑类似Tommy ValandSSJS中的Rhino想法

编辑2:更糟糕的是。您可以执行以下操作:

prototype.importPackage = null

要么

prototype.Array = null

如您在@SvenHasselbach的文章中所见:http ://hasselba.ch/blog/?p=1371

编辑3:IBM:您告诉我可以使用SSJS。来一个!请解决此问题,这是可怕的。请让我们正式向IBM报告此问题。

斯文·哈塞尔巴赫

您可以使用以下Java代码重置SSJS解释器:

FacesContextExImpl fc = (FacesContextExImpl) FacesContextExImpl.getCurrentInstance();
UIViewRootEx2 uiRoot = (UIViewRootEx2) fc.getViewRoot();
JSContext jsContext = uiRoot.getJSInterpreter().getJSContext();
jsContext.getRegistry().init(jsContext);

这将重新初始化注册表和所有原型功能。

编辑:fc的声明更改为正确的类型。

编辑2:这是SSJS版本:

var uiRoot = facesContext.getViewRoot();
var jsContext = uiRoot.getJSInterpreter().getJSContext();
var reg = jsContext.getRegistry();
reg.init( jsContext );

我是否正确理解您的意思,就是要清理SSJS解释器以避免与您自己的原型扩展冲突只是为了澄清上面的答案:这一次重新初始化SSJS解释器。而且只有一次。您必须一遍又一遍地执行此操作,因为在重新初始化之后,服务器上的另一个应用程序可以立即再次覆盖原型功能。这就是为什么这不是一个真正的解决方案,而是对您最初的问题的解答。

如果其他应用程序在您的代码尝试使用扩展程序时执行相同的操作,则会产生严重的后果...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在带有FTP的Linux服务器中的mkdir中使用数据变量?

来自分类Dev

如何在JavaScript中使用服务器端倒数计时器?

来自分类Dev

如何使用c#和interop.domino.dll的用法在Domino服务器中插入新的注释文档?

来自分类Dev

有关如何在Thrift(客户端/服务器)中使用TFileTransport的示例

来自分类Dev

有关如何在Thrift(客户端/服务器)中使用TFileTransport的示例

来自分类Dev

Webpack 开发服务器如何在构建目录中使用没有文件的包?

来自分类Dev

有人在试图破解吗?在我的Apache2 Ubuntu 18.04服务器上接收可疑请求

来自分类Dev

如何在Iron中使用服务器发送的事件?

来自分类Dev

如何在Fedora中使用特定的镜像服务器?

来自分类Dev

如何在远程Linux服务器中使用Maven?

来自分类Dev

如何在Laravel中使用Redis服务器检测?

来自分类Dev

如何在无服务器框架中使用 jquery?

来自分类Dev

如何在循环的服务器请求中使用 Phaser?

来自分类Dev

如何在 jenkins 服务器中使用 json 文件?

来自分类Dev

如何在服务器中使用 imap 接收 gmail?

来自分类Dev

为什么有人在循环宏中的子句中使用关键字?

来自分类Dev

如何在django和psycopg2中使用服务器端游标?

来自分类Dev

如何在VS2015中使用Visual Studio开发服务器

来自分类Dev

如何在Tomcat服务器中使用HTML访问/ WEB-INF中的文件?

来自分类Dev

如何在跨服务器的IIS中使用OWIN for IIS中的OAuth AccessTokenFormat?

来自分类Dev

有人在emberjs中使用语义UI吗?

来自分类Dev

有人在emberjs中使用语义UI吗?

来自分类Dev

如何在共享服务器服务中运行服务器端Javascript?

来自分类Dev

有人还在使用解析服务器吗?

来自分类Dev

如何管理所有人使用的单个厨师服务器

来自分类Dev

如何在JavaScript中检查服务器连接性

来自分类Dev

如何在解析服务器javascript sdk中递减

来自分类Dev

如何在Redhat机器上的Lotus Domino服务器中创建最简单的数据库

来自分类Dev

如何在 html 模板 (ASP.NET) 中的 Javascript 饼图中使用 AJAX 方法显示从客户端检索的动态服务器端数据

Related 相关文章

  1. 1

    如何在带有FTP的Linux服务器中的mkdir中使用数据变量?

  2. 2

    如何在JavaScript中使用服务器端倒数计时器?

  3. 3

    如何使用c#和interop.domino.dll的用法在Domino服务器中插入新的注释文档?

  4. 4

    有关如何在Thrift(客户端/服务器)中使用TFileTransport的示例

  5. 5

    有关如何在Thrift(客户端/服务器)中使用TFileTransport的示例

  6. 6

    Webpack 开发服务器如何在构建目录中使用没有文件的包?

  7. 7

    有人在试图破解吗?在我的Apache2 Ubuntu 18.04服务器上接收可疑请求

  8. 8

    如何在Iron中使用服务器发送的事件?

  9. 9

    如何在Fedora中使用特定的镜像服务器?

  10. 10

    如何在远程Linux服务器中使用Maven?

  11. 11

    如何在Laravel中使用Redis服务器检测?

  12. 12

    如何在无服务器框架中使用 jquery?

  13. 13

    如何在循环的服务器请求中使用 Phaser?

  14. 14

    如何在 jenkins 服务器中使用 json 文件?

  15. 15

    如何在服务器中使用 imap 接收 gmail?

  16. 16

    为什么有人在循环宏中的子句中使用关键字?

  17. 17

    如何在django和psycopg2中使用服务器端游标?

  18. 18

    如何在VS2015中使用Visual Studio开发服务器

  19. 19

    如何在Tomcat服务器中使用HTML访问/ WEB-INF中的文件?

  20. 20

    如何在跨服务器的IIS中使用OWIN for IIS中的OAuth AccessTokenFormat?

  21. 21

    有人在emberjs中使用语义UI吗?

  22. 22

    有人在emberjs中使用语义UI吗?

  23. 23

    如何在共享服务器服务中运行服务器端Javascript?

  24. 24

    有人还在使用解析服务器吗?

  25. 25

    如何管理所有人使用的单个厨师服务器

  26. 26

    如何在JavaScript中检查服务器连接性

  27. 27

    如何在解析服务器javascript sdk中递减

  28. 28

    如何在Redhat机器上的Lotus Domino服务器中创建最简单的数据库

  29. 29

    如何在 html 模板 (ASP.NET) 中的 Javascript 饼图中使用 AJAX 方法显示从客户端检索的动态服务器端数据

热门标签

归档