Foros del Web » Programando para Internet » PHP »

Seguridad

Estas en el tema de Seguridad en el foro de PHP en Foros del Web. Bueno, el tema es simple, soy nuevo en php e hize mi web y la tenia online, lo mas bien, pero alguien se conecto a ...
  #1 (permalink)  
Antiguo 13/02/2008, 15:06
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 10 meses
Puntos: 14
Seguridad

Bueno, el tema es simple, soy nuevo en php e hize mi web y la tenia online, lo mas bien, pero alguien se conecto a mi BD, y me borro todo y me dejo un mensajito el mui ****.

Bueno, quisiera saber, ya que soy nuevo, algunos temas de seguridad, como para que esto no pase :(
  #2 (permalink)  
Antiguo 13/02/2008, 15:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Seguridad

Busca en Google temas como SQL Inyection y XSS Inyection, son los ataques mas comunes que se usan para entrar a las bases de datos y tener control sobre el sistema.

Saludos.
  #3 (permalink)  
Antiguo 13/02/2008, 15:36
 
Fecha de Ingreso: febrero-2008
Ubicación: Bahia Blanca
Mensajes: 173
Antigüedad: 16 años, 9 meses
Puntos: 7
Re: Seguridad

El tema es muy extenso, y como bien dijo GatorV, deberìas buscar en google sobre sql injection, xss, etc. y tambien otro muy importante llamado "remote file inclusion" Pero brevemente te puedo resumir algunas directivas basicas de seguridad que siempre hay que tener en cuenta:

1) filtra todo lo que entra. (si el campo està vacìo, si tiene el tipo de caracteres que deberìa tener, ej: numerico/cadena, etc, si tiene caracteres como "//" "\\" " '' " (barras, comillas, etc).
2) filtra todo lo que sale tambien :) , esto nadie lo tiene en cuenta, pero es muy importante para preventir ataques semànticos. Osea, no muestres lo que no se tiene que mostrar.
3) usa solamente variables en datos variables. Para los datos que ya estan definidos usa constantes (ej: define(nombre,valor) ).
4) no uses variable globales.
5) nunca hagas ej: include ($variable) o header("Location: $variable") ni $var = $var2, osea, nunca pases una variable como paràmetro en su totalidad. Siempre hay que pasar una parte constante y otra variable , ej include (/includes/$variable).
6) Te paso un script que usa SMF Forum, es para programadores perezosos :) , simplemente hay que copiarlo al comienzo de cada .php en el que uses db's (le hice una pequeña traduccion).

function limpieza($var){
if (!is_array($var)) return addslashes($var);
$new_var = array(); foreach ($var as $k => $v)$new_var[addslashes($k)]=limpieza($v);
return $new_var;
}
$_POST=limpieza($_POST);
$_GET=limpieza($_GET);
$_REQUEST=limpieza($_REQUEST);
$_SERVER=limpieza($_SERVER);
$_COOKIE=limpieza($_COOKIE);
?>

Al poner este script "al principio" de cada codigo que uses, lo que haces es limpiar las variables antes de usarlas.

salu2

Última edición por shock_dude; 13/02/2008 a las 15:48
  #4 (permalink)  
Antiguo 13/02/2008, 15:45
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 10 meses
Puntos: 14
Re: Seguridad

muchas gracias, a las respuestas.

el mysql_connect, me conviene definir los datos en un archivo .inc y hacerle un require, por ej
Código PHP:
require("conexion.inc"); 
o directamente, declarar las variables en cada php qe utilize bd ?
  #5 (permalink)  
Antiguo 13/02/2008, 15:59
 
Fecha de Ingreso: febrero-2008
Ubicación: Bahia Blanca
Mensajes: 173
Antigüedad: 16 años, 9 meses
Puntos: 7
Re: Seguridad

eso va en gustos, pero te conviene hacer las dos cosas.

en el .inc pones las variables ($host, $user, $pass)
y despues en cada .php que uses la db usas: mysql_connect($host,$user,$pass);

pd: y mucho mejor si en el .inc usas constantes en vez de variables, como comentè en el post de arriba.

Cita:
Iniciado por kokoou Ver Mensaje
muchas gracias, a las respuestas.

el mysql_connect, me conviene definir los datos en un archivo .inc y hacerle un require, por ej
Código PHP:
require("conexion.inc"); 
o directamente, declarar las variables en cada php qe utilize bd ?
  #6 (permalink)  
Antiguo 13/02/2008, 19:31
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 10 meses
Puntos: 14
Re: Seguridad

disculpa mi insistencia. Asi estaria bien el archivo .inc? :$

Código PHP:
<?
define
($server,"IP");
define($database,"basededatos");
define($dbpass,"password");
define($dbuser,"usuario");
?>
  #7 (permalink)  
Antiguo 13/02/2008, 21:57
 
Fecha de Ingreso: febrero-2008
Ubicación: Bahia Blanca
Mensajes: 173
Antigüedad: 16 años, 9 meses
Puntos: 7
Re: Seguridad

serìa sin "$"

ej:

define("server","ip");
y para usar una constante luego se usa asì: ej: echo server; (sin $)

Igualmente, creo que fui un poco exagerado y paranòico al mencionar esto :P
en este caso se pueden usar variables normalmente. Las constantes se usan para evitar que sean reemplazados los valores desde el exterior para dañar tu sitio, o bien para usar tu script como puente para hackear otros sitios. En tu caso, es casi imposible que esto ocurra, asi que me retracto nuevemente por ser tan paranòico :S , aunque usarlo asi nunca estarìa de mas.


Cita:
Iniciado por kokoou Ver Mensaje
disculpa mi insistencia. Asi estaria bien el archivo .inc? :$

Código PHP:
<?
define
($server,"IP");
define($database,"basededatos");
define($dbpass,"password");
define($dbuser,"usuario");
?>
  #8 (permalink)  
Antiguo 14/02/2008, 02:51
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Re: Seguridad

Solo usa .inc si tu servidor lo interpreta como PHP. Prueba a meter en tu navegador la url del .inc y si ves el texto, entonces cambia a .inc.php .
  #9 (permalink)  
Antiguo 14/02/2008, 04:40
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 2 meses
Puntos: 41
Re: Seguridad

Cita:
Iniciado por DarkJ
Solo usa .inc si tu servidor lo interpreta como PHP. Prueba a meter en tu navegador la url del .inc y si ves el texto, entonces cambia a .inc.php .
Yo sería un poco menos blando. Por cuestiones de portabilidad, siempre utilza archivos que el servidor sepa interpretar (mejor .php que .inc por defecto).
  #10 (permalink)  
Antiguo 14/02/2008, 08:08
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 10 meses
Puntos: 14
Re: Seguridad

muchas gracias por las respuestas, decidi hacerlo asi porque la persona qe se metio en la BD tiene que haber leido este codigo de alguna manera, sino no entiendo como entro a la BD =/
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

SíEste tema le ha gustado a 1 personas




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