Cómo asegurar que mi Base de Datos esté libre de código malicioso

spitfire Seguir

Épsilon
Verificación en dos pasos activada
Desde
20 Feb 2013
Mensajes
943
buenas noches, estoy creando un sitio el cual va a requerir que usuarios agreguen información y esta se guarde en mi base de datos

que precauciones debo tomar para que no me suban un código raro que pueda borrar datos o incluso la base de datos entera, o algo asi?

seria suficiente evitar que suban ciertos caracteres como < > ? o alguno mas? muchas gracias por su ayuda
 

BotBeta

Admin
Sigma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Suscripción a IA
Desde
13 Jun 2020
Mensajes
29.815
Hola, es importante tomar medidas de seguridad al permitir que usuarios agreguen información a tu base de datos. Para evitar que se suban códigos maliciosos o se borren datos importantes, puedes implementar las siguientes medidas:

1. Validar la entrada de datos: Esto significa que debes asegurarte de que los datos que ingresan los usuarios cumplan con ciertos criterios específicos y se ajusten a un formato definido. Por ejemplo, puedes hacer que los campos de entrada solo permitan ciertos caracteres o que los datos ingresados cumplan con un formato específico.

2. Utilizar parámetros en las consultas SQL: Si utilizas consultas SQL para insertar datos en la base de datos, debes asegurarte de utilizar parámetros en lugar de concatenar cadenas de texto. Esto evitará la posibilidad de inyección SQL, que consiste en insertar código malicioso en una consulta SQL.

3. Utilizar funciones de escape: Si permites que los usuarios ingresen datos que incluyen caracteres especiales, debes utilizar funciones de escape para que estos caracteres no se interpreten como código malicioso. Por ejemplo, puedes utilizar la función "htmlentities" para escapar caracteres HTML.

4. Utilizar validación del lado del servidor: No confíes únicamente en la validación del lado del cliente, ya que esta puede ser fácilmente eludida. Debes realizar la validación del lado del servidor para asegurarte de que los datos ingresados cumplan con los criterios definidos.

Estas son solo algunas de las medidas que puedes tomar para asegurar la integridad de tu base de datos. Espero que te sean útiles.
 

spitfire

Épsilon
Verificación en dos pasos activada
Desde
20 Feb 2013
Mensajes
943
muy interesante, supongo que es una respuesta creada con IA, me gustaría recibir opiniones de los usuarios también
 

EasyProjects

Gamma
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Nov 2020
Mensajes
195
Que lenguaje estas usando?
 

moiseseccam

Pi
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
5 Mar 2013
Mensajes
6.357
Si estas usando SQL puro, usa algún escape de caracteres especiales.
 

marjuanm

Eta
Programador
Verificación en dos pasos activada
Desde
16 Ago 2012
Mensajes
1.423
muy interesante, supongo que es una respuesta creada con IA, me gustaría recibir opiniones de los usuarios también
Pues como ya te indicó la IA valida todo al subir, ponle usuario y contraseña a tu bd para obligar a que se suba todo por tu app y que está valide siempre lo que estás subiendo.
 

spitfire

Épsilon
Verificación en dos pasos activada
Desde
20 Feb 2013
Mensajes
943
Al final agregue esto para cada campo a agregar, que les parece?
por lo menos funciona y elimina esos caracteres antes de subir a la base de datos

PHP:
$abc=trim($nombre);
$abc=str_replace("<","",$abc);
$abc=str_replace("?","",$abc);
$abc=str_replace("=","",$abc);
$abc=str_replace(">","",$abc);
$abc=str_replace("(","",$abc);
$abc=str_replace(")","",$abc);
$nombre=str_replace("/","",$abc);
 

ceamchange

No recomendado
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
5 Ene 2023
Mensajes
408
hola, estoy usando PHP
Si estás enviando datos mediante un Formulario en POST.

Te puede servir colocar esto, para que todo lo que suba pase a string.

$dato = $mysqli->real_escape_string($_POST['dato']);
 

spitfire

Épsilon
Verificación en dos pasos activada
Desde
20 Feb 2013
Mensajes
943
Si estás enviando datos mediante un Formulario en POST.

Te puede servir colocar esto, para que todo lo que suba pase a string.

$dato = $mysqli->real_escape_string($_POST['dato']);
si estoy enviando mediante POST en un formulario, y eso que hace? elimina los caracteres especiales?
 

ceamchange

No recomendado
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
5 Ene 2023
Mensajes
408
si estoy enviando mediante POST en un formulario, y eso que hace? elimina los caracteres especiales?

Evita la inyección de código.

Así inserten alguna sentencia sql, la cambia por un string o una cadena de texto, para que no se ejecute nada.
 

ceamchange

No recomendado
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
5 Ene 2023
Mensajes
408
Si estás enviando datos mediante un Formulario en POST.

Te puede servir colocar esto, para que todo lo que suba pase a string.

$dato = $mysqli->real_escape_string($_POST['dato']);

La variable global $mysqli->

Viene de la función de conexión a la db.

$mysqli=new mysqli("localhost","USER","CLAVE","BASEDEDATOS"); //servidor usuario de base de datos, contraseña del usuario, nombre de base de datos.

if(mysqli_connect_error()){
echo 'Conexion Fallida : ', mysqli_connect_error();
exit();
}
 

EasyProjects

Gamma
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Nov 2020
Mensajes
195
hola, estoy usando PHP
@Armandolqr mira! Si ayudo xd

Soy desarrollador especializado en php, wn primera instancia, crea interfaces con un tipo de dato.

Desde la version 8.1 se puede agregar un tipo de dato a una variable como typescript, igualmente puedes usarlo dinamico o estatico.

Trata de integrar un \ (slash invertido) detras de todos los $ en tus peticiones, de esta manera previenes que obtengam otras variables dentro de tu codigo.

Si usas symfony o laravel te aconsejo usar un orm, ahora si no, el tipado estatico de datos a ingresar en la base de datos debe ser requerimiento si o si.

Haz una aplicacion tipo api en php, el codigo espagueti html con php y trabajar de manera estructurada es horrible, usa clases, polimorfismo, herencia, interfaces etc.

(Mira mi libreria para apis, es facil de usar, mirala, te aconsejo aprender a usarla ;) )

No uses arrays con [] si son datos enviados por el usuario, usa stdClass.

Si no usas un ORM para bases de datos te aconsejo usar la conexion pdo y la función bindParam de la conn que haces.

No es necesario usar el htmlentities o htmlencode o htmlspecialchars porque ahora estaras usando pdo para olvidarte de esas ' o " que pueden hacerte sql injection.

Usa siempre el error_reporting(0); cuando el codigo lo tengas en produccion(en tu servidor);

Puedo aconsejarte mas a fondo por un precio ;) danada.
 

spitfire

Épsilon
Verificación en dos pasos activada
Desde
20 Feb 2013
Mensajes
943
@Armandolqr mira! Si ayudo xd

Soy desarrollador especializado en php, wn primera instancia, crea interfaces con un tipo de dato.

Desde la version 8.1 se puede agregar un tipo de dato a una variable como typescript, igualmente puedes usarlo dinamico o estatico.

Trata de integrar un \ (slash invertido) detras de todos los $ en tus peticiones, de esta manera previenes que obtengam otras variables dentro de tu codigo.

Si usas symfony o laravel te aconsejo usar un orm, ahora si no, el tipado estatico de datos a ingresar en la base de datos debe ser requerimiento si o si.

Haz una aplicacion tipo api en php, el codigo espagueti html con php y trabajar de manera estructurada es horrible, usa clases, polimorfismo, herencia, interfaces etc.

(Mira mi libreria para apis, es facil de usar, mirala, te aconsejo aprender a usarla ;) )

No uses arrays con [] si son datos enviados por el usuario, usa stdClass.

Si no usas un ORM para bases de datos te aconsejo usar la conexion pdo y la función bindParam de la conn que haces.

No es necesario usar el htmlentities o htmlencode o htmlspecialchars porque ahora estaras usando pdo para olvidarte de esas ' o " que pueden hacerte sql injection.

Usa siempre el error_reporting(0); cuando el codigo lo tengas en produccion(en tu servidor);

Puedo aconsejarte mas a fondo por un precio ;) danada.
no estoy familiarizado con mas de la mitad de lo que escribiste, tendré que ponerme a completar mis conocimiento jaja, estare publicando en negocios cuando necesite contratar a alguien, estate atento
muchas gracias por tu ayuda, y te felicito por tu gran conocimiento en el tema
 

EasyProjects

Gamma
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Nov 2020
Mensajes
195
no estoy familiarizado con mas de la mitad de lo que escribiste, tendré que ponerme a completar mis conocimiento jaja, estare publicando en negocios cuando necesite contratar a alguien, estate atento
muchas gracias por tu ayuda, y te felicito por tu gran conocimiento en el tema
Gracias!, Ahí estaré atento a cualquier petición que hagas ;)

He desarrollado desde mis 12 años, actualmente tengo 19.
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba