Para prevenir la contaminación de prototipos, filtra las funciones de fusión y elimina específicamente underscore, underscore, proto, underscore, underscore. Lodash ha corregido todas las instancias de contaminación de prototipos. Al usar una propiedad propia, asegúrate de que exista en el objeto y no en su cadena de prototipos. La creación de objetos defensivos utilizando Object.create o Object.createNull puede prevenir la contaminación de prototipos. La sanitización y validación de datos son cruciales para prevenir ataques externos. Considera el uso de bibliotecas como joy para la sanitización de datos al construir un servidor web Node.js. Node.js tiene una opción para deshabilitar proto, underscore, underscore, proto, underscore, underscore, pero ten cuidado, ya que puede romper algún código.
Cómo prevenir la contaminación de prototipos porque soy una persona responsable, no quiero que te sientas asustado y digas , sabes, usemos un lenguaje sin prototipos como Python. ¿Cómo prevenir? Bueno, filtremos, ya sabes, las funciones de fusión. Verás, por ejemplo, en la línea nueve aquí, línea nueve, nueve, tres, o en la línea cuatro aquí, que filtramos, underscore, underscore, proto, underscore, underscore. Y eso es lo que hemos estado corrigiendo en muchas bibliotecas. Lodash ha corregido más instancias de contaminación de prototipos que cualquier otra biblioteca que conozco, y todas han sido corregidas una por una. Si encuentras una nueva, siéntete libre de revelarla de manera responsable a su mantenedor, sin importar qué biblioteca sea.
A veces, sabrás que tu camino de código es crítico y quieres asegurarte de que estás usando una propiedad propia. Bueno, bueno, una propiedad propia puede ser manipulada con ataques de terceros, pero eso es algo diferente. Así que asegúrate de que si esperas que una propiedad exista en un objeto, te asegures de que exista en el objeto y no en su cadena de prototipos. Además, me gusta esto. Es lo que llamo construir un objeto defensivo. No sé si ese es el término académico, pero puedes usar Object.create y eso creará un nuevo objeto con sus argumentos como prototipo. Bueno, null es un objeto. Así que puedes hacer Object.createNull. Estos objetos no tendrán todos los métodos que esperas que tengan como propiedad propia, símbolos propios, descriptores de propiedad propia, pero este objeto estará a salvo de la contaminación de prototipos porque no tiene ningún prototipo.
Sanitización, asegúrate de que lo que ingresa a tu proceso desde el exterior sea seguro. Realiza validación de datos. Me encanta la biblioteca joy porque soy un niño feliz y gordo, pero hay muchas bibliotecas increíbles para realizar sanitización de datos. Úsalas. Son muy geniales. Y de todos modos, deberías usarlas si estás construyendo un servidor web con Node.js. Como se mencionó, eso también probablemente reducirá tu superficie de ataque a la inyección de secretos. Así que adelante.
Conclusiones. Oh dios mío, llego a tiempo. ¿Qué sigue? Monitorea los objetos entrantes. Node.js tiene una opción para deshabilitar proto, underscore, underscore, proto, underscore, underscore. Puede romper algún código. Así que ten en cuenta que puede romper algún código debido a Internet, pero puedes usarlo. Y para la sanitización y objetos sin prototipos. Oh, ¿recuerdas por qué te dije que deberías usar Python? Eso fue una broma en enero.
Comments