Protección básica de sitios web (XSS, inyección de SQL, hashing)

2

Tengo una aplicación muy simple que permite a los usuarios no autenticados dejar comentarios (quizás más adelante incorpore un capatcha). La aplicación luego almacena los comentarios en una base de datos de mysql. Hago todo lo posible para filtrar caracteres especiales, pero no creo que sea el mejor enfoque. ¿Cuál es el mejor enfoque para protegerse contra los ataques de inyección de SQL?

Además, el sitio contiene muchos javascript y, por lo tanto, probablemente reescribiré parte de la lógica del lado del servidor. La principal vulnerabilidad que veo es una función de devolución de llamada que envía una cadena al servidor. Esta cadena se analiza y luego se envía a la base de datos. ¿Es esto una vulnerabilidad real y, en caso afirmativo, cómo puedo solucionarlo? Además, ¿tener lógica en el cliente es un riesgo? ¿Cuál es el criterio allí?

Por último, ¿cómo implemento un hash de contraseña simple para la base de datos? ¿Acabo de seguir estas instrucciones? (Lo pregunto porque lo intenté y fracasé, pero solo quería asegurarme de que estoy persiguiendo al conejo correcto)

Además, ¿me estoy perdiendo algo grande?

    
pregunta 19.08.2014 - 17:07
fuente

1 respuesta

1

Para la inyección de SQL, básicamente estás en el camino correcto. El mejor consejo es no lanzar tu propia . Use algo bien conocido; el idioma que esté utilizando probablemente tenga una biblioteca para usar con el SQL parametrizado adecuado. OWASP tiene un artículo muy bueno que incluye mitigaciones contra este vector de ataque aquí

Si esta cadena nunca es ejecutable, entonces no es una vulnerabilidad (que puedo pensar en este momento de todos modos). Básicamente, este es un vector de inyección. Si la cadena nunca se usa directamente, entonces no debería causar una vulnerabilidad de inyección. Si esta cadena se usa para controlar la lógica de su aplicación, entonces sí, esto podría ser una vulnerabilidad dependiendo de lo que controle y de la profundidad del conocimiento de los atacantes sobre su aplicación.

Para la teoría del hash de contraseñas, Thomas Pornin tiene una muy buena respuesta aquí . Lo esencial es utilizar una buena implementación conocida, y cualquier idioma que esté utilizando tendrá un método incorporado para las contraseñas de hash. Solo asegúrate de seguir todas las recomendaciones en la publicación vinculada, por ejemplo, qué algoritmo usar y el tamaño de la sal.

En cuanto a cualquier otro consejo, le sugiero que consulte el OWASP Top 10 para obtener un excelente consejo.

    
respondido por el Chris Murray 19.08.2014 - 17:21
fuente

Lea otras preguntas en las etiquetas