¿Cómo puedo prevenir XSS en una entrada de $ _POST?

1

Ya he seguido la sugerencia aquí y añadido:

/* Prevent XSS input */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

a la parte superior de mi archivo PHP. Pero mi pregunta es, ¿es segura la forma en que uso $ _POST en esta entrada requerida?

if (empty($_POST['number']) || !isset($_POST['number'])) {
    $this->setStatusMessage($translator->translate('please enter your number.'));
    $this->setStatus(KDatabase::STATUS_FAILED);

    return false;
}else{
    $this->telefonnummer = $_POST['number'];
}
    
pregunta YoKoGFX 10.03.2018 - 22:45
fuente

1 respuesta

2

No piense en proteger sus entradas para evitar XSS, todo debe tratarse de resultados.

XSS y otras vulnerabilidades de inyección de código ocurren cuando los datos no se escapan o no se convierten correctamente para el contexto en el que se utilizarán.

La forma de hacerlo depende de la tecnología de salida y del contexto. Como mencionó AndrolGenhald en los comentarios, si está realizando una salida directamente desde PHP, sin usar una biblioteca de plantillas, y desea usar una variable en el contexto del código HTML, debe pasarla a través de htmlspecialchars . Con otros contextos y tecnologías la respuesta será diferente. Debe encontrar la forma correcta de escapar de los datos para cada contexto.

Si puedes asegurarte de que siempre estás escapando los datos en la salida correctamente, entonces no debes usar FILTER_SANITIZE_STRING. Eso elimina irreversiblemente varias cosas de la cuerda, en lugar de simplemente hacerlas seguras. En un sitio web bien hecho como StackExchange, puedo enviar el código <script>alert('XSS')</script> , y no se elimina, solo se codifica para que el navegador lo muestre de manera segura en lugar de ejecutarlo.

El código en su pregunta no incluye ningún resultado, por lo que no puede ser vulnerable a XSS. Debe mostrar el código que produce algún resultado si desea saber si lo hace de forma segura.

    
respondido por el bdsl 15.03.2018 - 22:37
fuente

Lea otras preguntas en las etiquetas