note 54764 added to security.database.connection
| From: | jhony192 at coderic dot org | 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