Ver Mensaje Individual
  #69 (permalink)  
Antiguo 14/05/2010, 03:19
Avatar de Flow89
Flow89
 
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Flow89 Ver Mensaje
Bueno, ahora te planteo una duda y un problema.

Problema

Con IE7, ahora no me coge las cookies en administracion.php que esta en el mismo directorio que se crean las cookies, pero si me las coge en otro directorio como es el de usuarios.

Es por lo de la barra "/" esa que añadimos a las cookies con mozilla si funciona pero con ie no :S




Ahora la duda;

Para insertar seguridad a un sistema de Id's (para lo de las noticias vamos)
con utilizar

$var = (int)$_GET['id'];

es suficiente? o tambien utilizo lo de

if(!is_numeric($_GET['id'])){
die("La variable ID contiene caracteres no permitidos");
//aqui podriamos logear este comportamiento en un archivo log, guardar ip, enviarnos un email, lo que hiciese falta
}

He decidido utilizar mejor el if, y he encontrado este codigo por internet

Código PHP:
function getRealIP()
{

   if( 
$_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
   {
      
$client_ip =
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ?
            
$_SERVER['REMOTE_ADDR']
            :
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ?
               
$_ENV['REMOTE_ADDR']
               :
               
"unknown" );

      
// los proxys van añadiendo al final de esta cabecera
      // las direcciones ip que van "ocultando". Para localizar la ip real
      // del usuario se comienza a mirar por el principio hasta encontrar
      // una dirección ip que no sea del rango privado. En caso de no
      // encontrarse ninguna se toma como valor el REMOTE_ADDR

      
$entries split('[, ]'$_SERVER['HTTP_X_FORWARDED_FOR']);

      
reset($entries);
      while (list(, 
$entry) = each($entries))
      {
         
$entry trim($entry);
         if ( 
preg_match("/^([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)/"$entry$ip_list) )
         {
            
// http://www.faqs.org/rfcs/rfc1918.html
            
$private_ip = array(
                  
'/^0\\./',
                  
'/^127\\.0\\.0\\.1/',
                  
'/^192\\.168\\..*/',
                  
'/^172\\.((1[6-9])|(2[0-9])|(3[0-1]))\\..*/',
                  
'/^10\\..*/');

            
$found_ip preg_replace($private_ip$client_ip$ip_list[1]);

            if (
$client_ip != $found_ip)
            {
               
$client_ip $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      
$client_ip =
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ?
            
$_SERVER['REMOTE_ADDR']
            :
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ?
               
$_ENV['REMOTE_ADDR']
               :
               
"unknown" );
   }

   return 
$client_ip;


Lo que hace es recoger la ip, aunque navegue por proxy.

El asunto sería.. el codigo final como quedaría?

if(!is_int($_GET['id'])){
die("La variable ID contiene caracteres no permitidos");
include("cazaIP.php");
$victima = getRealIp();
$sql = "INSERT INTO ips (ip,incidente) VALUES('$victima','intento de Inyeccion SQL')";
mysql_query($sql);
}

Algo así funcionaría??


Ah, y sí, me refiero a eso, en Internet Explorer ahora no me coge las cookies en el mismo directorio pero si en otros.