¿Cómo aborda Node.JS varias técnicas de piratería como la inyección SQL o las secuencias de comandos de sitios cruzados (XSS)?

Hola,

Node.js por sí solo no proporciona ninguna protección contra estos ataques.

XSS –
——-
Un servidor de eco http.no desnudo node.js que utiliza el módulo predeterminado ‘http’ es completamente vulnerable a XSS.
Por ejemplo, enviando la solicitud:
http: // localhost: 8000 / xx? a = alert (‘XSS’) </ script > al servidor:

var http = require (‘http’);
http.createServer (función (req, res) {
res.end (req.url);
}). escuchar (8000);

aparecerá la alerta XSS.

Sin embargo, la mayoría de los servidores web utilizan algún tipo de motor de plantillas para generar la pantalla, como JADE.
Cada motor de plantilla emplea diferentes protecciones contra XSS.
Tomemos a JADE como ejemplo.
Por defecto, JADE usa el siguiente código para convertir caracteres potencialmente maliciosos a su equivalente HTML:

exportaciones.escape = función de escape (html) {
resultado var = cadena (html)
.replace (/ & / g, ‘& amp;’)
.replace (/ </ g, '& lt;')
.replace (/> / g, ‘& gt;’)
.replace (/ “/ g, ‘& quot;’);
if (result === ” + html) return html;
de lo contrario devolver resultado;
};

Un punto interesante a notar es que un solo apóstrofe no está codificado en & apos; Probablemente esté bien, ya que los apóstrofes se convierten en comillas dobles durante un paso anterior

Siempre que use Jade de acuerdo con las reglas, probablemente esté bien con XSS, pero aún necesita saber en qué casos JADE no escapa automáticamente de los personajes por usted.
Un par de ejemplos en los que puedo pensar son el operador de atributo! = Como en:
div (escapado = “")
div (sin escapes! = "")
y el operador & atributos (puede encontrar más información sobre estos aquí: Jade - Motor de plantillas)

Obviamente, si escribe su código de manera irresponsable (como: script # {title}) , su código será vulnerable.

Otros motores de plantillas probablemente funcionan de manera similar, pero debe asegurarse de conocer los diversos escenarios protegidos por el motor seleccionado.

Inyección SQL
Este es complicado por dos razones principales:

1. Para el paquete “SQL”: algunos paquetes NPM que tienen una sintaxis similar a las declaraciones preparadas en realidad están construyendo una declaración SQL completa detrás de escena mientras escapan a los caracteres sospechosos. Esto es malo tanto en términos de rendimiento, ya que la base de datos tiene que compilar un nuevo plan de ejecución para cada solicitud, y en términos de seguridad, ya que las listas negras, en muchos casos, pueden ser eludidas.
Debe verificar de cerca su paquete de elección y ver cómo maneja las declaraciones preparadas detrás de escena.

2. Para los paquetes “NoSQL”: los datos enviados a la base de datos pueden ser un JSON en lugar de una cadena, por lo que aunque el siguiente código parece perfectamente correcto:

app.post ('/', function (req, res) {

db.users.find ({nombre de usuario: req.body.username,

contraseña: req.body.password},

function (err, users) {// TODO: maneja el resto}); });

En realidad, se puede omitir fácilmente enviando un JSON, en lugar de enviar cadenas como nombre de usuario y contraseña, lo que comprobaría si hay una entidad cuyo nombre de usuario es mayor que VACÍO y su contraseña es mayor que VACÍO.
Esta declaración siempre es cierta y permitirá el inicio de sesión, sin conocer credenciales válidas.

{"nombre de usuario": {"$ gt": ""}, "contraseña": {"$ gt": ""}}

Puede encontrar más sobre eso aquí: escáner de aplicaciones web, seguridad y más

Espero que esto ayude,
Maty Siman
https://www.checkmarx.com/resources/

Realmente nunca trabajé en Node.JS, así que no puedo escribir ninguna buena respuesta, muchachos, por favor, ayuden con una respuesta valiosa ………

More Interesting

¿Cómo se implementa el cliente web de Quip?

¿Qué tipo de sistema de pago usan sitios como 99 diseños o ugallery?

¿Qué tecnologías se usaron para construir Jetstrap?

¿Cuáles son las mejores herramientas / marcos para un desarrollador de back-end para construir rápidamente una interfaz de usuario web?

¿Qué extrañaré si no uso WhatsApp y Facebook?

Tengo buenos antecedentes usando PHP / MySQL. ¿Qué debo tener en cuenta para crear una aplicación web como Stack Overflow?

¿Cómo se puede aplicar la escritura estática a la programación web, cuando la web se escribe de forma dinámica o flexible?

¿Qué hace realmente un marco web?

¿Qué es un buen marco PHP como WordPress, pero para construir aplicaciones web? Necesito un marco que pueda manejar la administración de usuarios, el motor de plantillas, las actualizaciones de seguridad y que tenga buena documentación para el desarrollo.

¿Cuál es el proceso para construir una aplicación desde la Idea hasta una aplicación exitosa?

¿Qué marco es bueno para crear una aplicación de Android y una aplicación web en Python?

Cómo hacer que las personas se registren en una plataforma cuando el público objetivo no es experto en tecnología o no está dispuesto a llenar formularios

¿Tienen preferencia los programadores que han trabajado tanto en la web como en dispositivos móviles y por qué?

¿Cómo se estructura un equipo de desarrollo de aplicaciones web?

¿Qué es una buena aplicación para construir para practicar?