Ver Mensaje Individual
  #73 (permalink)  
Antiguo 14/05/2010, 03:55
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];

He creado una tabla en mi bbdd que se llama, ataques y tiene los campos id, ip e incidente.

Este es el codigo de bnoticias, página en la que me salen todas las noticias y yo elijo cual borrar.
Código PHP:
<html>
<head>
<title>Panel de Administraci&oacute;n - Borrar Noticias</title><style type="text/css">
<!--
body {
    background-image: url(../imagenes/bg_pattern.gif);
}
-->

</style>
<script type="text/javascript" src="scripts/widgEditor.js"></script>
<link href="css/widgEditor.css" rel="stylesheet" type="text/css" /> 
<link href="css/widgContent.css" rel="stylesheet" type="text/css" /> 
<link href="css/main.css" rel="stylesheet" type="text/css" /> 
<link href="css/info.css" rel="stylesheet" type="text/css" /> 
<link href="../css/general.css" rel="stylesheet" type="text/css" /> 

</head>
<body>
<table width="200" border="0" align="center">
  <tr>
    <td><img src="http://www.forosdelweb.com/f18/imagenes/panel.png" width="500" height="200"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><div align="center" class="Estilo16 Estilo40">Borra Las Noticias | <a href='../loginpanel/administracion.php'> Volver </a></div></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr><td>
<?php

//Nos comenectamos a la BBDD.
include("conex.php");

//Recogemos la variable PAGS.
$pags=$_GET[pags];

//Propiedades de Paginacion.
if (!isset($pags))
$pags 0;
$cantidad 10;
$inicial $pags $cantidad;

//Realizamos la busqueda en la BBDD.
$noticias=mysql_query("SELECT * FROM noticias ORDER BY fecha DESC LIMIT $inicial,$cantidad"$connect);
$totalnoticias=mysql_num_rows($noticias);

//Calculamos el numero de páginas a mostrar.
$contar=mysql_query("SELECT * FROM noticias",$connect);
$totalpaginas=mysql_num_rows($contar);
$paginas intval($totalpaginas $cantidad);

//Imprimimos los resultados.
while ($row=mysql_fetch_array($noticias))
{echo 
"<span class=\"Estilo35\"><img src=\"../imagenes/prueba2.png\" width=\"50\" height=\"50\">" .$row[titulo]."</span><br><p>" .$row[noticia]."</p><br><div> Por: ".$row[autor]." | "
      
.date("d-m-Y",$row[fecha])." | Categoria: ".$row[categoria]." | <a href=\"borrar.php?id=".$row[id_noticia]."\">Borrar</a></div><br><div align=\"center\"><img src=\"../imagenes/separador.png\" width=\"400\" height=\"15\"></div>";
}
echo 
"<br>";

//Creamos los enlaces, Anterior/Siguiente.
echo "<center><p>";
if (
$pags <>0)
{
$url $pags 1;
echo 
"<font><a href='noticiero.php?id=".$id."&pags=".$url."'> Anterior « </a></font>";
}
else {
echo 
" ";
}
for (
$i 0$i<($paginas 1); $i++) {
if (
$i == $pags) {
echo 
"<font><b>$i</b></font>";
}
else {
echo 
"<font><a href='noticiero.php?id=".$id."&pags=".$i."'>" .$i"</a></font>";
}
}
if (
$pags $paginas) {
$url $pags 1;
echo 
"<font><a href='noticiero.php?id=".$id."&pags=".$url."'> » Siguiente </a></font>";
}
else {
echo 
" ";
}
echo 
"</p></center>";
?></td>
  </tr>
</table>
</body>
</html>
Este es el código que tengo en borrar.php

Código PHP:
  <?
      
//recibimos la variable $id
      
$id$_GET['id'];

//Incluimos el archivo de conexion
    
include ("conex.php");

//comprobamos la variable $id
    
if(!is_int($id)){
    include(
"cazaips.php");
    
$victima $client_ip;
    
$sql "INSERT INTO ataques (ip,incidente) VALUES('$victima','intento de Inyeccion SQL')";
    
mysql_query($sql);
    die(
"La variable ID contiene caracteres no permitidos");
    }
      

//borramos los registros pertenecientes a la id
      
mysql_query("delete from noticias where id_noticia='$id'",$connect);
      
header("location: ../index.php");
      
?>

Y bueno el codigo del script lo tienes un pelin más arriba pero lo vuelvo a poner:

Código PHP:
 <?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;

}  
?>

El caso es que SIEMPRE me sale el mensaje, y en la BBDD me aparecen campos, id (Se autoincrementa) IP con el valor 0 en todas y el incidente Ataque Inyeccion SQL.

Bueno, con esto ya se que el script no funciona correctamente ya que no coge la ip, luego buscare otra manera, pero lo que me interesa es ..

Porque siempre muestra el mensaje?