Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: jdc en 26 Agosto 2009, 21:50 pm



Título: Como se hacen páginas estilo index.php?pagina=1
Publicado por: jdc en 26 Agosto 2009, 21:50 pm
Pues eso... Me gustaría saber como se fabrican esas urls ya que he buscado pero llegué hasta listados de resultados pero no logró entender como funciona...
 
Se que en el servidor no están las páginas "pagina=1", "pagina=2", etc... Sino que entiendo que "pagina" sería una variable y "1" sería el valor... Pero como se crea algo así? Sería con php y mysql por obligación o podría ser sin base de datos?


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: braulio-- en 26 Agosto 2009, 22:01 pm
Podría ser sin base de datos de esta forma:
Código
  1. <?
  2. if ($_GET['pagina']==1)
  3. {
  4. include('pagina.html');
  5. }
  6. elseif ($_GET['pagina']==2)
  7. {
  8. include('lalala.ototo');
  9. }
  10. ...
  11. ?>
  12.  


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: WHK en 26 Agosto 2009, 22:25 pm
he visto casos que hacen esto:
Código
  1. <?php
  2. if($_GET['pagina'])
  3. include('inclusiones/'.$_GET['pagina'].'.php');
  4. ?>
y no es chiste xD
index.php?pagina=../../imagenes/shell_lfi.jpg%00


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: jdc en 26 Agosto 2009, 22:53 pm
Entonces no es seguro usarlo así? Tenía pensado hacer una página con noticias o lo que sea con base de datos donde la base tendría una tabla y cada fila de la tabla se mostraria en una página... Por ahora la seguridad sería postre ya que quiero aprender la forma básica y luego avanzar (incluyendo seguridad claro está) por cierto como se evita el local file included que mencionar WHK?


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: WHK en 27 Agosto 2009, 00:24 am
para eso hay filtros, por ejemplo puedes usar expresiones regulares para tomar el valor de una pagina o usar (int) sy es numérico y si usas mysql hay filtros como mysql escape real string.
Formas cortrectas:

index.php?pagina=contacto
Código
  1. <?php
  2. $incluir = 'secciones/'.preg_replace('|[^A-Za-z0-9_]|i', '', $_GET['pagina']).'.php';
  3. if(file_exists($incluir))
  4. include($incluir);
  5. else
  6. include('secciones/404.php');
  7. ?>

index.php?id=9
Código
  1. <?php
  2. $incluir = 'secciones/'.(int)$_GET['pagina'].'.php';
  3. if(file_exists($incluir))
  4. include($incluir);
  5. else
  6. include('secciones/404.php');
  7. ?>

index.php?id_sql=pagina
Código
  1. <?php
  2. $incluir = mysql_query('
  3. select *
  4. from secciones
  5. where sección = \''.mysql_real_escape_string($_GET['pagina']).'\'
  6. ', $manejador);
  7. .... mysql_fetch_array($incluir, MYSQL_ASSOC) .....
  8.  
  9. if(file_exists($incluir))
  10. include($incluir);
  11. else
  12. include('secciones/404.php');
  13. ?>


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: дٳŦ٭ en 27 Agosto 2009, 01:10 am
he visto casos que hacen esto:
Código
  1. <?php
  2. if($_GET['pagina'])
  3. include('inclusiones/'.$_GET['pagina'].'.php');
  4. ?>
y no es chiste xD
index.php?pagina=../../imagenes/shell_lfi.jpg%00

pnwd XD


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: Spider-Net en 27 Agosto 2009, 08:44 am
Yo estas cosas las veo más claras con un switch que con un elseif aunque funciona igual, yo suelo hacer algo así:

Código
  1. $var=filtra($_GET['var']);
  2.  
  3. switch($var){
  4.    case "principal":
  5.           include("main.php");
  6.           break;
  7.  
  8.    case "galeria":
  9.           include("gallery.php");
  10.           break;
  11.  
  12.    case "contacto":
  13.           include("contact.php");
  14.           break;
  15.  
  16.    default:
  17.           include("error.php");
  18.           break;  
  19. }

Y hago la llamada así: ?var=galeria (por ejemplo)

Siempre uso la función filtra en la que suelo hacer una pasada por funciones para evitar tags html, php, sql injection etc...

Algo así:

Código
  1. function filtra($string){
  2.   $string=htmlentities(strip_tags(trim(no_sql($string))));
  3.   return $string;
  4. }

La función no_sql no es propia de PHP pero puedes encontrar muchas anti sql-injection por internet, de hecho por aquí en el foro hay varias.

Un saludo!


Título: Re: Como se hacen páginas estilo index.php?pagina=1
Publicado por: jdc en 2 Septiembre 2009, 22:33 pm
Y la función que posteo WHK también impide un eventual sql inyection no? Elimina otros caracteres que no sean mayúsculas, minúsculas o números por ejemplo en la de página=página