Foros del Web » Programando para Internet » PHP »

Conectar de forma segura con la base de datos

Estas en el tema de Conectar de forma segura con la base de datos en el foro de PHP en Foros del Web. Hola, me gustaría saber como se hace una conexion de forma segura con la base de datos, yo he utilizado estos dos ejemplos: Código PHP: ...
  #1 (permalink)  
Antiguo 01/09/2011, 04:45
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Conectar de forma segura con la base de datos

Hola, me gustaría saber como se hace una conexion de forma segura con la base de datos, yo he utilizado estos dos ejemplos:

Código PHP:
<?php
    $connect 
mysql_connect("..........",".............","..........") or die(mysql_error());
    
$database mysql_select_db("..............",$connect);?>
y

Código PHP:
<?php 

// constantes de conexion de db 
define'DB_SERVER''..........' ); 
define'DB_NAME''..............'); 
define'DB_USER''................'); 
define'DB_PASS''..................'); 

?>
Mi problema esta relacionado con que han entrado en la base de datos como pedro por su casa y no sé como evitar eso.

EDITO:

He probado a descargar la pagina "index.php" de mi web, que lleva código en php relacionado con la conexión a la base de datos, al abrirlo el código php no se ve (mucho mejor para mi) pero eso me desconcierta aun mas, por que no tengo ni idea de como evitar otra intrusión mas.

Necesito ayuda ya sea a base de ejemplos o links.

Muchas gracias de antemano.

PD: me han recomendado hacer una conexión a través de un directorio que no sea accesible vía web, pero claro no tengo ni idea.
  #2 (permalink)  
Antiguo 01/09/2011, 06:08
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 8 meses
Puntos: 297
Respuesta: Conectar de forma segura con la base de datos

Yo creo que más bien lo que te han hecho es SQL Injection - [url]http://es.wikipedia.org/wiki/Inyección_SQL[/url].

Te recomiendo que le cambies el nombre a la base de datos, al usuario y la contraseña, y no pongas texto, pon carácteres aleatorios con número, letras y signos.

De todas formas si te hicieron lo que te comenté no es problema en la forma que te conectas con la BD, sino las consultas que le haces y que recogen información que te da el usuario, son como el diablo, nunca te puedes fiar de esas abominaciones :P
  #3 (permalink)  
Antiguo 01/09/2011, 06:29
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Conectar de forma segura con la base de datos

y como hago para que las consultas sean mas seguras, gracias por tu respuesta.
  #4 (permalink)  
Antiguo 01/09/2011, 06:33
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 8 meses
Puntos: 297
Respuesta: Conectar de forma segura con la base de datos

evitando que los usuarios pongan en las url carácteres como ', " o &. Hay funciones en PHP que te lo hacen y que son exactamente para evitar el SQL Injection.
  #5 (permalink)  
Antiguo 01/09/2011, 08:14
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Conectar de forma segura con la base de datos

como dice HASDPK si evitas que las variables que pasas tengan caracteres especiales habras acabado con ese problema, otra forma es que cambies de user y de clave (en el caso que puedas hacerlo)...

tambien te recomiendo bloquear el directorio donde se encuentra el arcivo con el cual te estas conectando, eso suele hacerlo el servidor por defecto, pero no esta de mas chequear que en esa carpeta este el arcvhio .HTACCESS...

Ahora volviendo al tema de las funciones para quitar los caracteres raros...

podrias usar:

mysql_real_escape_string($_GET["variable"])...

asi evitarias las Inyeccion de SQL.... cuentanos haber si has resolvido el problema
  #6 (permalink)  
Antiguo 01/09/2011, 08:34
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Conectar de forma segura con la base de datos

gracias a todos, cuando lo tenga todo resuelto, os digo como ha ido gracias, la verdad es que ignoraba todo esto, gracias.

He puesto estas lineas de código que segun dicen, evitan que puedan entrar escribiendo consulta desde la barra:


Código PHP:
<? 
// Evitamos la inyeccion SQL 

// Modificamos las variables pasadas por URL 
foreach( $_GET as $variable => $valor ){ 
$_GET $variable ] = str_replace "'" "'" $_GET $variable ]); 

// Modificamos las variables de formularios 
foreach( $_POST as $variable => $valor ){ 
$_POST $variable ] = str_replace "'" "'" $_POST $variable ]); 

?>

Ahora después de volver a mirar el código me surgen las dudas de si tengo que cambiar las "$variable" que ponen en el código por las que sean sean necesarias de mi código, pero no tengo ni idea xDD estoy hecho un lio.

PD: JuJOGual, luego te cuento como me ha ido, con tu recomendación.

Última edición por taoshi; 01/09/2011 a las 10:33
  #7 (permalink)  
Antiguo 01/09/2011, 16:01
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Conectar de forma segura con la base de datos

Bien dejemos todo los post anteriores atras, por que parece que funciona, ahora el que intente una "inyección sql" se va a comer un moco xDD he puesto el codigo en todas la variables que hay en los "where" de las consultas y funciona bien salvo en una cosa,

me arroja este error sobre la linea 59 del código:
Cita:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /homepages/20/d345209756/htdocs/mipagina/vernoticia.php on line 59

Código PHP:
// traemos los comentarios aprobados
52. $arrComentarios = array();
53. $query "SELECT comentarios.idComentario, comentarios.comentario, usuarios.usuario  
54. FROM `comentarios` 
55. INNER JOIN `usuarios` ON comentarios.idUsuario = usuarios.idUsuario 
56. WHERE comentarios.estado = 'apto' AND comentarios.idNoticia = \"" 
mysql_real_escape_string$_GET['idNoticia']) . "\"; OR comentarios.estado = 'sin validar' AND comentarios.idNoticia = \"" mysql_real_escape_string$_GET['idNoticia']) . "\";
57. ORDER BY comentarios.idComentario DESC"
;
58. $resultado mysql_query ($query$dbConn);
59. while ( $row mysql_fetch_assoc ($resultado)) {
60.    array_push$arrComentarios,$row );


Gracias.
  #8 (permalink)  
Antiguo 01/09/2011, 16:13
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Conectar de forma segura con la base de datos

No sólo de caracteres especiales se puede hacer una inyección sql, imagina que haces algo como:

"select * from mi_tabla where id=$id"

Y en $id alguien coloca algo como: "3 or 1=1"

tu consulta quedaría como

"select * from mi_tabla where id=3 or 1=1"

También es importante manejar las comillas simples o apostrofes para cuando consultas o insertas datos.

Última edición por ocp001a; 01/09/2011 a las 18:40
  #9 (permalink)  
Antiguo 01/09/2011, 18:14
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Conectar de forma segura con la base de datos

esta es una gran funcion de php que te serviria,

http://www.php.net/manual/es/functio...ape-string.php

o esta otra

http://www.php.net/manual/es/function.addslashes.php

o le comparto este método que realice, tengo encuenta los caracteres especiales y con una función para postgres escapo lo caracteres

Código PHP:
Ver original
  1. public static function getValidarInjection($valor=null) {
  2.         if(!empty ($valor)) {
  3.             $valor          = htmlspecialchars_decode($valor);
  4.             $valor          = htmlspecialchars($valor);
  5.             $valor          = htmlentities($valor);
  6.             $valor          = pg_escape_string($valor);
  7.         }
  8.         return $valor;
  9.     }
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #10 (permalink)  
Antiguo 02/09/2011, 05:53
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Conectar de forma segura con la base de datos

Bien en primer lugar daros las gracias a todos que me habéis ayudado, como bien dije ayer en mi anterior post, he solucionado el problema con el codigo
Código PHP:
mysql_real_escape_string($_GET["variable"]) 
ahora cuando alguien escribe algo en la barra de navegación la pagina no saca errores de ningún tipo.

Pd: El error que me daba en la linea 59 ya esta arreglado, no entiendo el problema pero probando lo arreglé.

De nuevo gracias a todos.
  #11 (permalink)  
Antiguo 02/09/2011, 08:17
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Conectar de forma segura con la base de datos

OK me alegra leer que has podido solventar tu problema...

Etiquetas: mysql, segura, sql, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:39.