¿Cómo puedo hacer que la inyección de SQL sea más difícil pero no imposible?

6

Estoy haciendo una solicitud de CTF para mi proyecto del último año. Quería elaborar un indicador de inyección de SQL, pero no deseo que simplemente puedan descubrir la vulnerabilidad de SQLi mediante la inyección ". Por lo tanto, ¿hay alguna manera de hacer que la inyección de SQL sea más difícil pero no imposible usando PHP?

    
pregunta ysj 23.04.2013 - 13:45
fuente

3 respuestas

12

inyección de SQL ciego es probablemente una de las técnicas más difíciles, ya que requiere más trabajo. Podría crear una página que no muestre ningún resultado en función de la consulta, pero que muestre mensajes de error cuando la consulta tiene un formato incorrecto. El atacante se vería obligado a utilizar técnicas SQLi ciegas para atacarlo.

Por supuesto, una herramienta automatizada rompería esto inmediatamente, ya que podría automatizar toda la inyección. Una forma interesante de evitar esto sería tener algún tipo de CAPTCHA de imagen super simple (sin distorsión, solo una imagen simple) que el atacante debe resolver para enviar una consulta. Esto los obligaría a hacerlo de forma manual o les haría ver las técnicas de OCR.

    
respondido por el Polynomial 23.04.2013 - 14:17
fuente
2

Puede ocultar los detalles del error, lo que dificulta que el usuario sepa que la inyección es posible.

Un siguiente nivel sería inyecciones ciegas de SQL, como mencionó Polinomio.

Además, podría reflejar la inyección en otra página que no sea la página actual, por ejemplo, una página de registro para que el usuario no reciba comentarios inmediatos sobre el código inyectado.

O puede reemplazar ciertos caracteres en la cadena de entrada (consulte: inyección de SQL: isn ¿No sustituyes a ("'", "' '")? )

    
respondido por el Stan 23.04.2013 - 15:06
fuente
1

Mi primer pensamiento es limitar los caracteres o patrones de expresiones regulares que buscas. Podría limitar el uso de solo ciertas cadenas dentro de la entrada del usuario que permitiría los ataques, pero complicaría el tipo de ataques que funcionarían.

Yo diría que la forma más fácil de idear algo como esto es probablemente pensar en un ataque en particular al que quieres que llegue alguien y luego trabajar hacia atrás. Intente diseñar protección para bloquear todo lo que no sea el ataque que desea que realicen. Incluso podría ser tan simple como hacerlo a prueba de Inyección SQL, pero luego permitir específicamente la entrada de ataque deseada, aunque podría ser un poco demasiado complicado dependiendo de lo que estés buscando.

    
respondido por el AJ Henderson 23.04.2013 - 15:54
fuente

Lea otras preguntas en las etiquetas