elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  crear enlaces seguros para las paginas php
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: crear enlaces seguros para las paginas php  (Leído 10,513 veces)
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: crear enlaces seguros para las paginas php
« Respuesta #20 en: 26 Septiembre 2014, 01:06 am »

Te ahorras tener que tocar esos archivos cada ves que tengas secciones nuevas.

No necesitas tocar los .htaccess para nada, con las reglas por default de wordpress te bastan. El ruteador hace todo por tí.. y las reglas del mod_rewrite pueden ser tan sencillas como:

Código
  1. DirectoryIndex entry.php
  2.  
  3. <IfModule mod_rewrite.c>
  4. RewriteEngine On
  5. RewriteBase /
  6. RewriteRule ^entry\.php$ - [L]
  7. RewriteCond %{REQUEST_FILENAME} !-f
  8. RewriteCond %{REQUEST_FILENAME} !-d
  9. RewriteRule . /entry.php [L]
  10. </IfModule>

Y no necesitas modificar tus rutas para nada en el .htaccess, las modificas en el archivo entry.php

Código
  1. <?php
  2.  
  3. $string = $_SERVER['REQUEST_URI'];
  4.  
  5. if($string == '/hola'){
  6. echo 'hey';
  7. }
  8. elseif($string == '/test'){
  9. echo 'test';
  10. }
  11. elseif($string == '/hey'){
  12. echo 'hrm';
  13. }
  14. elseif($string == '/'){
  15. echo 'home';
  16. } else {
  17. echo 'Error 404';
  18. }
  19.  
  20. ?>


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: crear enlaces seguros para las paginas php
« Respuesta #21 en: 26 Septiembre 2014, 01:49 am »

Vaya, dos maneras diferentes... Me gustaría probar las dos para ver que tal, pero tengo algunas dudas:

1º ¿Donde tengo que poner este codigo? Perdonar mi ignorancia :P

Código
  1.    if(isset($_SERVER['PATH_INFO']))
  2.    $rutaInfo = trim((string)$_SERVER['PATH_INFO'], '/');
  3.  
  4.    elseif(isset($_SERVER['ORIG_PATH_INFO']))
  5.    $rutaInfo = trim((string)$_SERVER['ORIG_PATH_INFO'], '/');

2º El metodo redirigiendo a entry.php,  que pasa en el caso de usar un archivo.php que existe para usar un link? Por ejemplo, si test.php existe y escribo test.php/site/login: daria error, no?

Porque cualquier cosa que escribas se redirige a entry.php y se compara con la lista? O solo se compara lo que hay despues de ?, o de esta manera se compara todo lo que escribas despues de la url? awww.site.com/'---> a partir de aqui se compara todo?

Volvemos a lo de antes, que pasa con las variables como login.php?error=1?? se seguirian ejecutando? site.com/site/login&error=1?

Gracias!


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: crear enlaces seguros para las paginas php
« Respuesta #22 en: 26 Septiembre 2014, 02:11 am »

Si test.php existe y escribes test.php/site/login, se ejecuta test.php, pero el URI cambia, ya no es /site/login ahora es /test.php/site/login. Claro que si tu script no está leyendo el URI o el path, no afecta en nada.

Para el queryString puede ser un problema, porque no hace un match exacto con la ruta. PATH_INFO sería una solución más adecuada si quieres conservar el QueryString o hacer alguna manipulación de texto con el REQUEST_URI. También puedes optar por "reescribir" tu queryString dentro de una ruta.

Por ejemplo:

Código:
/site/login/error/1
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: crear enlaces seguros para las paginas php
« Respuesta #23 en: 26 Septiembre 2014, 02:29 am »

¿Por que no funciona esto?

Código
  1. preg_match('/^([\w\/]+)=?(\w+)?&?/', $_SERVER['REQUEST_URI'], $matches);
  2. $matches[1] = isset($matches[1]) ? $matches[1] : null;

Es más complicado de lo que parece porque index.php es lo que llama la estructura y esta llama los views. Si se cambia de pagina ya no funcionaria...

Lo intento de ese modo porque me gustaría tener el tipo de links -> site.com/site/login&error=1 y que funcionara.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: crear enlaces seguros para las paginas php
« Respuesta #24 en: 26 Septiembre 2014, 02:46 am »

¿Por que no funciona esto?

Código
  1. preg_match('/^([\w\/]+)=?(\w+)?&?/', $_SERVER['REQUEST_URI'], $matches);
  2. $matches[1] = isset($matches[1]) ? $matches[1] : null;

Es más complicado de lo que parece porque index.php es lo que llama la estructura y esta llama los views. Si se cambia de pagina ya no funcionaria...

Lo intento de ese modo porque me gustaría tener el tipo de links -> site.com/site/login&error=1 y que funcionara.

Te refieres a:
Código:
site.com/site/login?error=1

No te va a funcionoar el regex.
Código
  1. $_SERVER['REQUEST_URI']
tiene un valor de
Código:
/site/login?error=1
Lo que podrías hacer es algo como lo que puse antes:

Código
  1. foreach ($includes as $key => $val){
  2. if(preg_match("@^/$key@", $_SERVER["REQUEST_URI"])){
  3. include $val;
  4. }
  5. }
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: crear enlaces seguros para las paginas php
« Respuesta #25 en: 26 Septiembre 2014, 04:34 am »

Lo siento fallo mio, si que funcionaba, se me olvido el .htaccess

Lo unico es que en lugar de entry.php uso index.php.

Código
  1. function showContent() {
  2. $views = 'views/';
  3. $site = $views . 'site/';
  4. $user = $views . 'user/';
  5.  
  6. if($_SERVER['REQUEST_URI'] == '/')
  7. $_SERVER['REQUEST_URI'] = '/home';
  8.  
  9. $includes = array(
  10. '/home' => $views . 'home.php',
  11. '/login' => $site . 'login.php',
  12. '/logout' => $site . 'logout.php',
  13. '/contact' => $site . 'contact.php',
  14. '/about' => $site . 'about.php',
  15. '/register' => $user . 'register.php',
  16. '/referral' => $user . 'referral.php',
  17. '/friend' => $user . 'friend.php',
  18. '/register_success' => $user . 'register_success.php'
  19. );
  20.  
  21. preg_match('/^([\w\/]+)=?(\w+)?&?/', $_SERVER['REQUEST_URI'], $matches);
  22. $matches[1] = isset($matches[1]) ? $matches[1] : null;
  23.  
  24. if(array_key_exists($matches[1], $includes)){
  25. $content = include($includes[$matches[1]]);
  26. } else $content = "Error 404";
  27. return $content;
  28. }
  29.  

Y efectivamente los links son: site.com/login?error=1

Al final de la manera mas simple posible, directamente el nombre del archivo, sin carpeta.

¿Podrías decirme alguna manera de comprobar si es vulnerable? Como por ejemplo lo de poner una larga cadena de caracteres y crear agujeros de esos. ¿O no se puede si hay una whitelist?
« Última modificación: 26 Septiembre 2014, 04:38 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: crear enlaces seguros para las paginas php
« Respuesta #26 en: 26 Septiembre 2014, 05:10 am »

Bueno, la expresión regular si te va a capturar la parte que necesitas, pero lo demás realmente es innecesario. De hecho, ahora que me pongo a pensar un poco en mi expresión, realmente no necesitas el "?=(\w+)?&?' para nada, está de más.

También podrias adaptar la expresión regular para que funcione através del archivo.php. Como lo tienes ahora:

Código:
http://www.site.com/inicio
//Funciona

http://www.site.com/index.php/inicio
//No funciona
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: crear enlaces seguros para las paginas php
« Respuesta #27 en: 26 Septiembre 2014, 05:38 am »

¿Te refieres a que funcionen los links con el index.php? Si es eso, es justo lo que no queria, usar nombres completos, el objetivo era este, con un simple nombre sin extension llamar la pagina.

Asi tal cual lo tengo funciona perfectamente.
« Última modificación: 27 Septiembre 2014, 14:54 pm por gAb1 » En línea

JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: crear enlaces seguros para las paginas php
« Respuesta #28 en: 29 Septiembre 2014, 06:15 am »

Sería más simple irse por lo que debería ser que estar evitando lo que no. Como se supone que debería de ser es, cualquier inclusión que se vaya hacer se parte de un directorio padre y común para iniciar. A éste directorio padre lo único que podría incluir es un archivo o más directorios, y archivos. Por regla general, los nombres de estos archivos y directorios sólo puede ser nombrados por letras de la A-Z y por mucho usar - y _ (/ para delimitar directorios). Cualquier otro carácter se omite y se parte de ahí para incluir cualquier cosa hacía adelante del directorio padre (nunca hacía atrás y mucho menos de algún otro origen que no sea el sistema de ficheros actual). Esto pensando que el "ruteo" sea del tipo /uno/dos/tres. Después sólo bastaría confirmar que el archivo exista.

Una disculpa si no pongo un ejemplo pero sólo paso por acá un rato y ya es de noche (me estoy haciendo viejo). Lo que es cierto es que ya hay bastante proyectos robustos que serían fácil de implementar y evitar reinventar la rueda como bien te comentaron.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: crear enlaces seguros para las paginas php
« Respuesta #29 en: 29 Septiembre 2014, 14:03 pm »

Citar
Sería más simple irse por lo que debería ser que estar evitando lo que no. Como se supone que debería de ser es

Permitir solo de la A a la Z mas - y _ no es irse por lo que debería ser, de hecho te contradices en parte ya que con ese filtro te estás saliendo de norma, que tal si una carpeta se llama por ejemplo admin.mensajes ? según tu modelo dejará de funcionar. Tanto en los sistemas Unix como Linux y Windows tienen diferentes estándares en cuanto a que carácter es permitido como nombre de carpeta y nombre de archivo, por lo cual si tu haces un desarrollo no estandarizado omitiendo caracteres que si están permitidos por el sistema entonces dejará de ser una aplicación escalable ya que otros desarrolladores o el mismo administrador del sistema no podrá utilizar el sistema de archivos común del mismo sistema operativo. Recuerda que un directorio o archivo puede incluir incluso caracteres como acentos, espacios en blanco, puntos, signos especiales, paréntesis, arrobas, etc.

Bajo este contexto mi modelo es el mas eficiente porque cumple con todos los estándares de posibles reales carpetas y archivos bajo una lista blanca como únicos permitidos y sin la necesidad de tener que modificar el código si agregas secciones nuevas, tampoco usa expresiones regulares, o sea, usa menos memoria, menos cpu, menos lineas de código, no es vulnerable, o sea tal como dijiste tu, irse por lo que debería ser en ves de estar evitando lo que no es, no se porque aun le dan tantas vueltas al tema buscando opciones menos inseguras, mas pesadas y con problemas de seguridad.
« Última modificación: 29 Septiembre 2014, 14:06 pm por WHK » En línea

Páginas: 1 2 [3] 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Editores en linux para crear paginas web ?
GNU/Linux
Weeken 8 5,117 Último mensaje 24 Noviembre 2012, 01:39 am
por oPen syLar
crear paginas de inicio para hotspot Antamedia
Software
Bleach@lex 0 831 Último mensaje 11 Noviembre 2015, 03:50 am
por Bleach@lex
Un problema para empleados y usuarios, los dichosos ‘seguros’ de MediaMarkt
Noticias
wolfbcn 0 1,293 Último mensaje 2 Diciembre 2017, 14:06 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines