Cómo prevenir la inyección JSONP

1

Recientemente, encontré muchas aplicaciones web que utilizan parámetros de devolución de llamada para recuperar datos con formato JSON. Esto hace que la aplicación web sea vulnerable al ataque de inyección JSONP. Entonces, ¿cuál es la forma efectiva de prevenir la inyección JSONP?

¿Se puede validar el parámetro de devolución de llamada en el lado del servidor? ¿Debería la solicitud de devolución de llamada también validada por CORS?

    
pregunta PenGeek 20.09.2017 - 05:49
fuente

1 respuesta

1

No use JSONP en absoluto: use CORS.

JSONP está obsoleto y siempre ha sido más un relleno hack que una tecnología pensada para compartir recursos. La alternativa moderna y ampliamente admitida es CORS (Intercambio de recursos entre orígenes). Lo más seguro es que puedas reemplazar todos los casos de uso de JSONP con él.

Con CORS, ya no necesita envolver su JSON en una función de devolución de llamada (por ejemplo, cb({"foo": "bar"}) ), pero manténgalo tal como está. En su lugar, envía un encabezado Access-Control-Allow-Origin para indicar al navegador los orígenes a los que desea dar acceso. Dado que cada navegador compatible con CORS envía un encabezado Origin en sus solicitudes de origen cruzado, puede generar el encabezado ACAO de forma dinámica, según el origen de la solicitud. Una vez permitido, el cliente podrá leer el contenido de la respuesta, independientemente del tipo de contenido. Así que solo puedes usar enviar JSON regular.

Muestra de solicitud de origen cruzado desde supplicant.example a una API JSON en server.example :

GET /foo.json HTTP/1.1
Host: server.example
...
Origin: https://supplicant.example
...

Respuesta de muestra:

HTTP/1.1 200 OK
....
Access-Control-Allow-Origin: https://supplicant.example
Content-Type: application/json
...

{"foo": "bar"}

CORS no solo proporciona mejor seguridad sobre JSONP, sino que también le brinda la capacidad de trabajar con métodos HTTP arbitrarios ( PUT , DELETE , etc.), puede dar acceso a encabezados particulares y mucho más. Mozilla tiene una excelente introducción sobre lo que CORS puede hacer.

    
respondido por el Arminius 20.09.2017 - 06:49
fuente

Lea otras preguntas en las etiquetas