¿Cómo proteger los datos de los usuarios en un sitio multiusuario?

0

Estoy trabajando en un sistema en el que las personas pueden hacer que sus cuentas se almacenen en una base de datos como ID (que será un incremento automático), nombre, apellido, nombre de usuario, etc.

Ahora estoy al tanto de las inyecciones de SQL, así que estoy usando declaraciones preparadas, pero ¿es la declaración preparada solo lo suficiente para evitar que los atacantes manipulen mi base de datos?

Todo el mundo sabe el nombre y apellido de las personas en las redes sociales y se podría usar:

'delete from table where firstname='john'' 

o se puede hacer lo mismo con ID, ya que es un incremento automático, podemos anotar cualquier número

'update table set firstname='joker' where id=555'. 

Por lo tanto, mi pregunta es si hay declaraciones preparadas lo suficiente para evitar ataques de sql o los profesionales almacenan dicha información en una base de datos en forma cifrada.

    
pregunta bɪˈɡɪnə 25.02.2016 - 04:07
fuente

2 respuestas

2

Si está utilizando declaraciones preparadas en cualquier parte de su código, la inyección de SQL no debería ser posible.

Sin embargo,

la inyección SQL es solo un medio de ataque. También debe asegurarse de que su sitio esté seguro contra otras formas de ataque. Lo más importante es asegurarse de que no es posible cargar archivos ejecutables, etc.

    
respondido por el user1751825 25.02.2016 - 05:46
fuente
2
  

¿Las declaraciones preparadas son suficientes para evitar los ataques de inyección SQL?

Dudoso, no confiaría solo en declaraciones preparadas. La validación de entrada todavía es necesaria y muy recomendable. Determine qué entrada espera en un campo y actúe en consecuencia.

Por ejemplo, en un campo de nombre no debe esperar caracteres como ">" o "<". Sin embargo, un carácter como una cita es esperado y debe tratarse adecuadamente.

  

¿Los profesionales almacenan dicha información en la base de datos en forma cifrada?

Esto depende del tipo de datos y su clasificación, generalmente no todos los campos están encriptados. En el caso de las tarjetas de crédito, por ejemplo, se requiere que estén encriptadas.

La ubicación de la clave de descifrado es otra cosa a considerar. Si la clave se almacena en la misma máquina donde se almacenan las tablas cifradas, es posible que un atacante también pueda obtener esta clave.

Un ataque de inyección de SQL también puede llevar a un acceso de shell y no siempre significa la extracción de los datos ubicados en la base de datos. Si la clave se almacena en la misma máquina, un atacante podría recuperar los datos cifrados y la clave de descifrado.

Nota: El cifrado de datos en una base de datos no debe considerarse una solución para los ataques de inyección de SQL.

    
respondido por el Jeroen - IT Nerdbox 25.02.2016 - 07:48
fuente

Lea otras preguntas en las etiquetas