¿Cómo prevenir los ataques de contaminación de los prototipos?

Como Prevenir Los Ataques De Contaminacion De Los Prototipos



El ataque de contaminación de prototipos explota la forma en que los objetos JavaScript tratan con sus prototipos correspondientes. En JavaScript, los prototipos son otro objeto que define las propiedades y métodos predeterminados para el objeto seleccionado. Un atacante explota la contaminación de los prototipos inyectando código malicioso en estos prototipos manipulando las propiedades del objeto o utilizando una función que fusiona objetos de forma recursiva.

Esta guía explica las formas de prevenir ataques de contaminación de prototipos.







¿Prevenir los prototipos de ataques contaminantes?

La causa fundamental de los ataques de contaminación de prototipos es que los objetos JavaScript heredan propiedades de su prototipo. Esto significa que si un atacante puede inyectar código malicioso en el prototipo, será heredado por todos los objetos que heredaron de ese prototipo. Esto conduce al robo de datos, la ejecución de código arbitrario o la toma del control de otras aplicaciones.



En el siguiente fragmento de código, se inyectará el prototipo de código de contaminación:



const y = { a: 1 , b: 2 } ;
datos constantes = JSON.parse ( '{'__proto__': { 'defectuoso': verdadero}}' ) ;
 
const c = Objeto.asignar ( { } , y, data ) ;
consola.log ( c.defectuoso ) ;

 
La descripción del fragmento de código anterior:





    • Primero, la lista denominada “ y ”Se crea y almacena los valores en el par clave-valor.
    • Con la ayuda de ' -por lo tanto- ”, el código contaminado aleatorio se implementa en formato clave-valor. La clave está configurada en ' defectuoso ” y el valor asignado de “ verdadero ”.
    • Luego, este código contaminado se asigna al “ y ” lista invocando el “ asignar() 'Método, y la lista resultante se almacena en una nueva lista llamada' C ”.
    • Finalmente, el código contaminado inyectado en el “ C Se recupera la lista y su valor se muestra en la consola. Para garantizar que se haya inyectado contaminación o datos maliciosos.

Después de ejecutar el archivo que lo contiene, el resultado muestra que el código malicioso se inyectó correctamente y se recuperó su valor:



¿Cómo prevenir los ataques de contaminación de los prototipos?

Existen varios enfoques mediante los cuales se puede prevenir el ataque de contaminación prototipo:

Fusiones recursivas inseguras:

Evite las fusiones recursivas inseguras porque pueden provocar ataques de contaminación de prototipos:

donde fusionar = ( acepta , src ) = > {
  para ( atributos var en src ) {
  si ( tipo de ( acepta [ atributos ] ) === 'obj' && tipo de ( src [ atributos ] ) === 'obj' )
  {
unir ( acepta [ atributos ] , src [ atributos ] ) ;
  } demás {
    acepta [ atributos ] = origen [ atributos ] ;
  }
  }
devolver acepta ;
} ;

 
En el código anterior:

    • Primero, la función personalizada ' unir() 'Se crea que acepta dos parámetros de matriz' acepta ' y ' src ”.
    • El mejorado “ para 'El bucle se utiliza para iterar la variable' atributos 'sobre el proporcionado' src ”parámetro.
    • Dentro del bucle, utilice un ' si ”que navega a través de ambos errores y si algún elemento que reside en ambas matrices tiene el mismo tipo de datos. Luego esos elementos se pasan como parámetros al mismo “ unir() ”Función que crea una naturaleza recursiva.
    • Si los tipos no son los mismos, el valor del elemento que reside en el ' src 'La matriz de parámetros se pasa a' acepta ”parámetro.
    • Finalmente, el ' acepta ”Se devuelve una matriz paramétrica.

Congelando el prototipo

Otra prevención para los ataques prototipo de contaminación es congelar su ciclo de ejecución. Esto se hace a través del “ Objeto.freeze() ' método. En el siguiente fragmento, el código contaminado prototipado inyectado anteriormente se congelará:

const y = { a: 1 , b: 2 } ;
datos constantes = JSON.parse ( '{'__proto__': { 'defectuoso': verdadero}}' ) ;
 
const c = Objeto.asignar ( { } , y, data ) ;
consola.log ( c.defectuoso ) ;  
 
consola.log ( Objeto.congelado ( c.defectuoso ) ) ;
consola.log ( Objeto.isFrozen ( c.defectuoso ) ) ;

 
La explicación del código anterior se muestra a continuación:

    • Inicialmente, se inyectará un código contaminado del prototipo ficticio en la lista ficticia ' y ”tal como se explica en la sección anterior.
    • Entonces, la llave contaminada inyectada” defectuoso 'se pasa al' congelar() ”Método para congelar la parte contaminada.
    • Finalmente, para confirmar la parte de contaminación del prototipo congelado. El ' defectuoso “clave de lista” C 'se pasa al' está congelado() ' método. Este método devuelve “ verdadero ” en caso de congelado y “ FALSO ” en caso de descongelado:

Después de ejecutar el código que lo contiene, el resultado muestra que la inyección, congelación y verificación del código contaminado congelado:


Consejos adicionales para prevenir el ataque de contaminación de los prototipos

A continuación se detallan algunos consejos adicionales mediante los cuales se puede prevenir el ataque de contaminación prototipo:

    • La opción de “ –deshabilitar-proto 'Se puede utilizar para desactivar o detener el funcionamiento del' prototipo.__proto__ ' propiedad.
    • No utilice métodos con la ayuda de ' prototipo ”.
    • Por ' Desinfectando la entrada del usuario ”que implica validar y filtrar la entrada del usuario para eliminar cualquier código malicioso o contaminado.
    • Uso de ' lista blanca ”, que es una lista de propiedades y métodos permitidos para un objeto. Se bloqueará cualquier intento de establecer u obtener propiedades o métodos que no sean miembros de la lista blanca.

Se trata de la prevención de prototipos de ataques de contaminación en Node.js.

Conclusión

Para prevenir ataques de contaminación de prototipos, se utilizan enfoques como evitar fusiones recursivas inseguras, congelar el prototipo y utilizar una lista blanca para evitar ' __por lo tanto__ Se puede utilizar la propiedad que se ha establecido. Junto con la utilización de “ –deshabilitar-proto ” opciones, evitando el uso de “ Objeto.prototipo ', y ' desinfectar la entrada del usuario ”para código contaminado. Esta guía ha ilustrado la prevención de prototipos de ataques de contaminación en Nodejs.