Verificar que una solicitud es interna

0

Tengo una aplicación web que solo generará código de seguridad . Necesita pasar esto a un servidor de Python. La forma lógica de pasar cosas entre JavaScript y Python es tener un servidor Flask en ejecución. Luego, el JavaScript enviaría una solicitud como http://example.com/test/?code=this_is_safe_code . El código sería evaluado.

Sin embargo,

no no quiero que los usuarios externos puedan enviar el código. Quiero que todas las solicitudes sean internas. Como sé que el código transmitido internamente será una expresión matemática segura, me siento cómodo usando eval . Sin embargo, si alguien del exterior envió algo como http://example.com/test/?code=__import__%28%22os%22%29.system%28%22echo%20DANGER%22%29 , Python ejecutaría __import__("os").system("echo DANGER") . Lo que obviamente no es seguro.

Las llamadas de JavaScript son completamente del lado del cliente, no estoy usando ningún JS backend con cosas como node.js .

¿Cuáles son los métodos de seguridad para permitir solicitudes internas desde JavaScript pero no solicitudes externas? ¿Necesitaría esto ser algún tipo de certificado privado?

    
pregunta Luke Taylor 13.03.2016 - 22:52
fuente

1 respuesta

2

No puedes asegurar esto. No hay forma de garantizar que su aplicación web esté en el otro lado de una conexión. Incluso si se le ocurren métodos (complicados) para tratar de sumar y firmar sus solicitudes en el JavaScript, un usuario podría simplemente usar su JavaScript para firmar sus propias solicitudes.

Probablemente puedas proteger esto cambiando el formato de lo que pasas al servidor de Python de forma libre en algo mucho mejor especificado. Por ejemplo, quizás pase una matriz de N números y N-1 operadores. Su servidor entonces validaría (usando una lista blanca) que los números son números y que los operadores están en el conjunto permitido de operadores matemáticos. Si esto pasara, entonces podría reconstruir el código Python y ejecutarlo.

Otra solución es ejecutar el JavaScript en el servidor y hacer que esos datos pasen directamente a Python. En este caso, debe validar la entrada al JavaScript de una manera similar a la descrita anteriormente.

Referencia: Hoja de referencia de validación de entrada de OWASP

    
respondido por el Neil Smithline 14.03.2016 - 00:09
fuente

Lea otras preguntas en las etiquetas