PHP - proteccion de bbdd

 
Vista:
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

proteccion de bbdd

Publicado por zendi (1056 intervenciones) el 19/12/2021 21:16:40
Desarrolle un script para crear la contraseña de usuario y script forma la contraseña con 7 digitos y lo hace de manera alfanumerica por ejemplo de esta forma: p7jfu4r. Quisiera saber si aun asi es posible que puedan hackear la tabla usuaios? Ahora bien he investigado y encontrado que con este codigo malicioso 'OR '1' ='1pueden destruir la BBDD?.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

proteccion de bbdd

Publicado por ee (5 intervenciones) el 19/12/2021 22:01:32
Pero por supuesto que así es, lo del OR 1=1 siempre dará TRUE, luego eso es solo simple lógica booleana.

Que hay que hacer para ayudar en algo a proteger nuestras aplicaciones:


Tratar de escapar (Limpiar) siempre la entrada del usuario, mediante mysqli_real_escape_string, y evitar el uso de instrucciones dinámicas, es decir armar la senetencia SQL para ir contatenando lo que el usuario ingresa.

Nunca hacer algo como: Select * From Tabla_Usuarios Where User = $user and Clave = $clave;

Se debe preferiblemente emplear sentencias preparadas con mysqli_prepare

Mejor aún si se emplean procedimientos almacenados, ya que estos quedan aislados en el servidor, ya que la BD tiene sus propios mecanismos de protección y por lo menos el código queda más aislado y menos propenso a ataques.

Yo recomiendo que esas claves deben estar debidamente encriptadas en mysql con AES_ENCRYPT y AES_DECRYPT para encriptar y desencriptar respectivamente, ya que Estas dos funciones permiten encriptar y desencriptar datos usando el algoritmo oficial AES (Advanced Encryption Standard) que actualmente es el más seguro.

Ideal es manejar claves numéricas de 6 caracteres, que da para unas 999.999 combinaciones, quedando claves tan seguras como las de la banca, y por supuesto el user debería ser el documento de identificación, que casi siempre es numérico, así es muy díficil de que nos claven texto, pues solo acepta caracteres estrictamente numéricos.

Que esto sea infalible, no, pues para los atacantes siempre será un reto tratar de vulnerar la seguridad, pero por lo menos no les quedará tan fácil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 557
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

proteccion de bbdd

Publicado por zendi (1056 intervenciones) el 19/12/2021 23:40:37
De acuerdo con todo lo que explicas, yo utilizo el gestor de BBDD PostgreSql, pudieras darme un ejemplo de como aplicarlo para este gestor?
para mysql es esta sentencia:
1
mysqli_prepare
de acuerdo. Para PostGresQl es
1
pg_prepare
como se aplica para este gestor? Otra cosa debo aplicar estas sentencias para el INSERT? Explicame por favor debo entregar esta aplicacion.
En esta consulta:
1
Select * From Tabla_Usuarios Where User = $user and Clave = $clave;
como debo aplicarlo.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

proteccion de bbdd

Publicado por ee (5 intervenciones) el 20/12/2021 00:51:35
Si, Zendi.

Aclaro que no soy el experto en Postgress, pero efectivamente el equivalente de mysqli_prepare (MySql), es: pg_prepare.

Su uso es similar al de mysql, su sintaxis es:

pg_prepare(resource $connection = ?, string $stmtname, string $query): resource

$stmt= pg_prepare($dbconn, "my_query", 'Select * From Tabla_Usuarios Where User = ? and Clave = ?;');

$stmt->bind_param("ss", $user, $clave);
$stmt->execute();

Y desde luego debes aplicarlo para sentencias de tipo insert y todas las demás (Update y Delete), porque es que cualquier sentencia SQL es susceptible de que le apliquen sql injection.

La clave es escapar bien lo que ingrese el usuario, utilizando filtros de saneamiento, que basicamente buscan eliminar etiquetas y caracteres especiales en una cadena.

Emplear claves estrictamente numéricas ayuda mucho, porque se le aplica un FILTER_SANITIZE_NUMBER_INT y con ello es imposible que nos “claven” una cadena de texto que pueda hacer daño como esta:

Select * From Tabla_Usuarios Where User = $v_user and Clave = $v_clave; Drop table Tabla_Usuarios;'

Lo anterior, elimina físicamente la tabla, y peor aún si nos hicieran algo como:

Drop Database XXX; donde XXX es el nombre de tu base de datos

Con esto nos eliminan completamente la BD, y si no se tiene respaldo, al otro día estás en la calle sin trabajo.

Lo del SQL Injection es muy peligroso, y hay que tomar las medidas adecuadas para frenar un poco la osadía de un atacante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar