¿Es posible la inyección de SQL después de filtrar?

-2

Solo estoy revisando un script que quiero usar para mi sitio web. El autor filtra todos los datos ingresados por el usuario ( $_POST y $_GET ) con esta función:

function XSSCheck($value) {
    return preg_replace(
        array('/&(?!amp;|quot;|nbsp;|gt;|lt;|laquo;|raquo;|copy;|reg;|#[0-9]{1,5};|#x[0-9A-F]{1,4};)/', '/#(?![0-9]{1,5};|x[0-9A-F]{1,4};)/',       '|<|',  '|>|',  '|"|',      "|'|"   ),
        array('&amp;', '&#35;', '&lt;', '&gt;', '&#34;', '&#39;'),
        stripslashes($value)
    );
}

Si filtro una cadena con eso, ¿sería posible inyectar en esta consulta SQL, por ejemplo?

SELECT * FROM table WHERE ID = '{$_REQUEST['id']}'

Ya lo probé, pero no encontré ninguna forma de hacerlo.

    
pregunta Richard 19.09.2015 - 18:54
fuente

2 respuestas

6

Las listas negras son una mala idea para protegerse contra vulnerabilidades como XSS y SQLi. La razón es que existen tantas técnicas de codificación, comportamientos del navegador, inconsistencias en el servidor de la base de datos y errores del servidor web que nunca podrá crear una lista negra de capacidad suficiente.

Para esta función, no será suficiente para la inyección XSS o SQL. Por ejemplo, ¿qué pasa con las inyecciones de SQL fuera de los literales de cadena? Para ambas clases de vulnerabilidades, hay correcciones apropiadas reconocidas.

XSS

  • Lista blanca cuando corresponda: un número es un número, una cadena consta de A-Za-z0-9, etc.
  • Donde no se puede hacer una lista blanca, como cadenas de búsqueda de forma libre o comentarios, codificación de salida.

inyección SQL

  • Lista blanca cuando corresponda: un número es un número, una cadena consta de A-Za-z0-9, el usuario solo puede seleccionar las tablas que especifique, etc.
  • Usar consultas parametrizadas: PHP admite esto. Aún mejor, use un ORM para que se encargue de usted.
respondido por el user79537 19.09.2015 - 19:54
fuente
1

No puede usar esa función para evitar inyecciones de SQL como lo comentó @NeilSmithline. El autor de esa función acertó al llamarlo XSSCheck() porque es para lo que puede usarlo.

Siento que estás confundido. inyección SQL es una vulnerabilidad del lado del servidor , XSS es una vulnerabilidad del lado del cliente . Las técnicas utilizadas para prevenir estos dos ataques también son diferentes. Le sugiero que tenga en cuenta esta gran diferencia y lea más sobre estas dos nociones.

P.S.

Tenga en cuenta que a la función le faltan algunos caracteres especiales, como las barras invertidas.

    
respondido por el user45139 19.09.2015 - 19:38
fuente

Lea otras preguntas en las etiquetas