note 54764 added to security.database.connection

From: Date: Thu, 14 Jul 2005 15:04:50 +0000
Subject: note 54764 added to security.database.connection
Groups: php.notes 
Request: Send a blank email to php-notes+get-91968@lists.php.net to get a copy of this message
yo sugiero hacer la conexion a la Base de Datos en el archivo lib.inc.php que por lo general es el que uso para meter las librerias. y enfocar la seguridad a este archivo. a continuación el archivo lib.inc.php <? # Aseguramos que no se pueda acceder al archivo via web. if(basename($_SERVER['PHP_SELF'])=="lib.inc.php") exit; function conex() { $conex=@mysql_connect('localhost','user','pass'); @mysql_select_db('database',$conex); return $conex; } #aqui metes el resto de las funciones ?> note que en cada una de las funciones de mysql he colocado un @ esto es para que en caso de ocurrir algún error no muestre detalles del error al usuario, estos arrobas "@" hay que retirarlos mientras se configura la conexión hasta que sea satisfactoria, luego de ser satisfactoria la conexión se le vuelven a agregar los arrobas, la razón por la cual no queremos que se muestre el error es la siguiente, en caso de que la conexión sea insatisfactoria, nos mostrara un error muy parecido al siguiente: [code]Warning: mysql_query(): Access denied for user: 'user@localhost' (Using password: yes) in /home/google/www/sites/lib.inc.php on line 34[/code] para cualquiera puede ser un simple error. pero para un Cracker que este en busca de un "Bug" (agujero de seguridad), esto puede sser un muy buen comienzo para efectuar un ataque, les explico por que, este error esta mostrando al usuario dos cosas que debemos ocultar, primero el usuario de la Base de datos (en este caso "user" ver + arriba) y el servidor donde se encuentra la Base de datos (en este caso "localhost" ver + arriba) aparentemente esto no parece muy importante, pero creanme podria acceder a una Base de datos solo con esos dos datos. lo de localhost ya sabemos que es el servidor local y es hasta por defecto el que usaremos, hay otras maneras de asegurar esa parte, y el nombre de usuario tambien para los casos donde permitimos acceder a todos los servidores a nuestra base de datos. luego limitamos el acceso al archivo lib.inc.php colocando en el archivo .htaccess las restrincciones de la siguiente manera: <Files ~ "^lib.inc.php"> Order Allow,Deny Deny from any </Files> de esta manera nadie podra leer absolutamente nada de este archivo. luego en los documentos conectas de la siguiente manera: <? include('./lib.inc.php'); $conex=conex(); // ... aqui llos querys que desees ejecutar... mysql_close($conex); ?> ---- Manual Page -- http://www.php.net/manual/en/security.database.connection.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+54764 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+54764&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+54764&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+54764&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+54764&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+54764&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+54764&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+54764&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#91968) next »