¿Usar comillas simples o dobles para evitar XSS y SQLi?

0

¿Por qué se recomienda poner comillas simples o dobles alrededor de los valores de atributos de HTML? Se recomienda prevenir el XSS, pero ¿por qué?

Lo mismo ocurre con la inyección SQL: se recomienda usar comillas simples o dobles al declarar los valores de entrada en una consulta.

¿Qué riesgos están asociados con la declaración de valores de entrada no cotizados en una consulta SQL o atributo HTML?

    
pregunta Tushar 08.08.2018 - 11:26
fuente

2 respuestas

0

Sin comillas, la carga útil escaparía del valor del atributo real e iniciará un nuevo atributo con su propia carga útil:

<div class=fist onclick=console.log(document.cookie)>

Mientras que entre comillas seguirá siendo un valor de atributo único inofensivo:

<div class="fist onclick=console.log(document.cookie)">

Tenga en cuenta que para evitar XSS, también debe codificar los caracteres especiales dentro del valor.

Para la inyección SQL la situación es diferente. Se recomienda estrictamente no declarar los valores de entrada en la consulta en primer lugar.

Para evitar una inyección de SQL, se debe definir un parámetro en la consulta en lugar del valor real, que debe enviarse a la ejecución de la consulta por separado:

$stmt->prepare("SELECT * FROM t WHERE id=?");
$stmt->execute([$id]);

Por lo tanto, no debe haber ni una sola cita en la consulta relacionada con el valor agregado dinámicamente, lo que hace que la pregunta en las citas sea irrelevante.

    
respondido por el Your Common Sense 08.08.2018 - 14:13
fuente
0

Nunca confíe en las cotizaciones para protegerse contra la inyección de código. No en HTML, y ciertamente no en SQL.

Un atacante que tiene la capacidad de inyectar cadenas no escapadas arbitrarias en su código fuente ya ha ganado, independientemente de los caracteres que utilice para envolver ese texto sin filtrar.

En su lugar, use cualquier sistema que el lenguaje o el marco que esté usando se haya creado para manejar las opiniones de los usuarios. En SQL puro, eso es probablemente consultas parametrizadas . En HTML generado por PHP, htmlspecialchars . En JavaScript del lado del cliente, Element.setAttribute . Averigüe qué sistema le proporciona su lenguaje / marco y úselo. No solo rodee el texto arbitrario entre comillas (solo o doble) y suponga que funcionará; probablemente no .

    
respondido por el Ajedi32 06.11.2018 - 18:18
fuente

Lea otras preguntas en las etiquetas