¿Cómo limpiar SSJS en el servidor Domino después de que alguien usó el prototipo de javascript en un nsf?

¿Cómo limpiar SSJS (Server Side Javascript) en el servidor Domino después de que alguien usó el prototipo de JavaScript en un NSF?

Mark Roden descubrió ungran debilidad en XPages SSJS: (gracias a David Leedy por contarme sobre esto y mostrarme el artículo).

Si tiene el siguiente código SSJS:

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

A XPages SSJS no le importa que usesvar (var significa que la variable debe ser local) y hacedummyObj.NAME visible en todo el servidor con el valorJohann. Entonces, si otro nsf en el mismo servidor usa una var con el mismo nombre, hereda todo el prototipo:

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

Este es un gran error (uno que hace que XPages SSJS IMO no sea confiable). Incluso si no usa prototipos en absoluto, si alguien más en su aplicación hace algo como esto:

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

Romperá todas las aplicaciones en el mismo servidor que usa el inocentedivisión().

Entonces, la pregunta es: si alguien "por error" escribe el siguiente SSJS (XPages Server Side Javascript) en un NSF:

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

¿Cómo puedo arreglar String.prototype.split () a su valor original?

Como dijo Mark Roden, reiniciar la tarea HTTP no lo soluciona.

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

Edición 1: ¿Por qué creo que este es un gran error?

Soy fanático de Javascript, pero en mi humilde opinión @MarkyRoden ha descubierto un gran error en SSJS. Las cuñas y los polyfills no son realmente el principal problema. Se sabe que Eval es una mala práctica, pero el objeto prototipo es un elemento fundamental de Javascript básico. Es la forma estándar y preferida de agregar métodos a las clases de Javascript, también es necesaria para la herencia y todo tipo deOOP cosas. Por lo tanto, necesitará algún tipo de espacio de nombres a nivel de servidor para evitar colisiones. Todo esto es realmente malo, pero el gran problema es que solo una línea de código en una aplicación puede romper todas las aplicaciones en un servidor. Sí, puede confiar en sus desarrolladores, pero uno de ellos puede escribir una línea incorrecta por error y también un servidor Domino puede tener cientos de aplicaciones de diferentes proveedores de software. Establecer la responsabilidad en las revisiones de código no es un procedimiento lo suficientemente confiable. Tal vez es hora de tener un verdadero motor de JavaScript en SSJS, como V8, Spidermonkey, Chakra o Rhino. Como solución alternativa, estoy pensando en algo como Tommy Valandidea con Rhino en SSJS.

Edición 2: es aún peor. Puedes hacer cosas como:

prototype.importPackage = null

o

prototype.Array = null

Como puede ver en el artículo de @ SvenHasselbach:http://hasselba.ch/blog/?p=1371

Edición 3: IBM: me dijiste que podía usar SSJS. ¡VEN UNO! POR FAVOR ARREGLAR ESTO, es horrible. Informemos oficialmente este problema a IBM.

Respuestas a la pregunta(2)

Su respuesta a la pregunta