Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MinusFour

#2891
Cita de: Kase en 26 Septiembre 2014, 19:59 PM
que probabilidad hay de tener un script asi?


o de tener algun otro script parecido?



Realmente no es del script en sí, si no de la forma en algunos servidores HTTP exportan variables al sistema, como apache.

http://httpd.apache.org/docs/2.2/env.html

Citar
Although these variables are referred to as environment variables, they are not the same as the environment variables controlled by the underlying operating system. Instead, these variables are stored and manipulated in an internal Apache structure. They only become actual operating system environment variables when they are provided to CGI scripts and Server Side Include scripts. If you wish to manipulate the operating system environment under which the server itself runs, you must use the standard environment manipulation mechanisms provided by your operating system shell.

Claro que hay muchas cosas que pasan por un script que va por CGI que también pueden ser vectores de ataque.

Si el servicio lo levantaron de /bin/sh, entonces las cabeceras se exportan como deben (porque estás manejando sh y no bash). Claro que se puso de moda poner /bin/sh como link a /bin/bash y de ahí muchos problemas.
#2892
PHP / Re: crear enlaces seguros para las paginas php
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:


http://www.site.com/inicio
//Funciona

http://www.site.com/index.php/inicio
//No funciona
#2893
PHP / Re: crear enlaces seguros para las paginas php
26 Septiembre 2014, 02:46 AM
Cita de: gAb1 en 26 Septiembre 2014, 02:29 AM
¿Por que no funciona esto?

Código (php) [Seleccionar]
preg_match('/^([\w\/]+)=?(\w+)?&?/', $_SERVER['REQUEST_URI'], $matches);
$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:
site.com/site/login?error=1

No te va a funcionoar el regex.
Código (php) [Seleccionar]

$_SERVER['REQUEST_URI']
tiene un valor de /site/login?error=1Lo que podrías hacer es algo como lo que puse antes:

Código (php) [Seleccionar]

foreach ($includes as $key => $val){
if(preg_match("@^/$key@", $_SERVER["REQUEST_URI"])){
include $val;
}
}
#2894
PHP / Re: crear enlaces seguros para las paginas php
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:


/site/login/error/1
#2895
PHP / Re: crear enlaces seguros para las paginas php
26 Septiembre 2014, 01:06 AM
Cita de: WHK en 25 Septiembre 2014, 23:48 PMTe 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 (apache) [Seleccionar]

DirectoryIndex entry.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^entry\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /entry.php [L]
</IfModule>


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

Código (php) [Seleccionar]

<?php

$string 
$_SERVER['REQUEST_URI'];

if(
$string == '/hola'){
echo 'hey';
}
elseif(
$string == '/test'){
echo 'test';
}
elseif(
$string == '/hey'){
echo 'hrm';
}
elseif(
$string == '/'){
echo 'home';
} else {
echo 'Error 404';
}

?>
#2896
PHP / Re: crear enlaces seguros para las paginas php
25 Septiembre 2014, 23:46 PM
Cita de: gAb1 en 25 Septiembre 2014, 23:30 PM
Y volviendo a lo de las rutas de enlace, ¿seria muy dificil con el codigo actual no necesitar "?" para llamar una pagina?

No es díficil, lo que hacen casi todos los ruteadores de los scripts/frameworks famosos como Wordpress, Joomla, Symfony, Zend, etc. Es redirigir todas las direcciones a un archivo de entrada (por medio de mod_rewrite) y luego parsean la dirección y despliegan el recurso necesario.

Por ejemplo:


http://pagina.com/hola
http://pagina.com/categoria
http://pagina.com/test


Por medio de un mod_rewrite haces que todas las urls redirigan a entry.php por ejemplo.

Desde el entry.php tu puedes manejar las urls y desplegar la información de acuerdo al REQUEST_URI.

Código (php) [Seleccionar]


if($_SERVER['REQUEST_URI'] == '/hola'){
   //Muestra el contenido de http://pagina.com/hola
} elseif($_SERVER['REQUEST_URI'] == '/categoria') {
  //Muestra el contenido de http://pagina.com/categoria
} else {
  //Ruta no econtrada: error 404
}
#2897
PHP / Re: crear enlaces seguros para las paginas php
25 Septiembre 2014, 23:28 PM
La variable $time, la estaba usando para hacer pruebas, al final volvia a hacer microtime() y restaba para saber cuanto tardaba en ejecutar el código.

¿Te refieres a cargar la ruta home cuando QUERY_STRING este vacio?
Código (php) [Seleccionar]

if(array_key_exists($matches[1], $includes)){
$content = include($includes[$matches[1]]);
} elseif (empty($_SERVER['QUERY_STRING'])){
        $content = include($includes['home']);
        } else {
        $content = "Error 404";
        }
return $content;
#2898
Cita de: engel lex en 25 Septiembre 2014, 22:54 PM
si no tienes magic quotes montado, si...


Código (php) [Seleccionar]
$username=$_POST['username'];
$password=$_POST['password'];
if ($password==NULL) {
echo "La password no fue enviada";
}else{
$query = mysql_query("SELECT username,password FROM usuarios WHERE username = '$username'") or die(mysql_error());


si yo por username paso en el input algo tipo


la consulta quedará
Código (sql) [Seleccionar]
SELECT username,password FROM usuarios WHERE username = '' OR '1'='1'

lo que retornará todo...

y tienes
así que no puedes ver el username, pero puedes usar LIMIT para sacar todas las contraseñas

por cierto, las contraseñas no se guardan en crudo, eso es pecado  :-X se guardan MINIMO en MD5 u otro algoritmo de hash

$password no es la contraseña de la base de datos. Pero es cierto que puedes modificar la query.
#2899
PHP / Re: crear enlaces seguros para las paginas php
25 Septiembre 2014, 21:24 PM
Cita de: WHK en 25 Septiembre 2014, 20:01 PM
Talves ese código pueda ser vulnerable a un RE-DOS (denial of service in expression Regular), por ejemplo tienes una llamada redundante si te escribo esta url:

demo/index.php/////////////// ... //////////////?&======&=&=&=&&&&&&&&&&& ...

Tu expresión puede causar que retorne nulo o que la función arroje alugn tipo de excepción especialmente por el array_key_exists ya que $matches[0] no existiría y puedes provocar un agujero de tipo path disclosure.

Pues a mi esas urls no me tiran ningun problema, incluso tirando URLs enormes. ¿En que parte de mi REGEX dices que puede haber una redundancia?

Si el OP se siente a disgusto con mi REGEX, pues se puede hacer otra cosa como:

Código (php) [Seleccionar]

foreach ($includes as $key => $val){
if(preg_match("@^$key@", $_SERVER["QUERY_STRING"])){
echo $val;
}
}


Y si el indice 0 no existe, devuelve un notice pero array_key_exists devuelve false así que lo que ponga dentro del bloque nunca llega a ejecutarse y array_key_exists no devuelve ninguna excepción, error, notice o warning.

De todas formas, es buena idea comprobar si el valor existe, solo por si algunas otras versiones de PHP se comportan de otra manera.

Cita de: gAb1 en 25 Septiembre 2014, 19:37 PM
Esa era la idea en un principio, ahora mismo lo mas cercano a eso que tengo es:

www.sitio.com/?site/login

Y me gustaría poder hacer eso que comentas... ¿Podrias decirme como podria hacerlo con el mod_rewrite? Ya tengo un .htaccess preparado :)

Pero volviendo al otro problema, es posible hacer que el codigo actual solo lea hasta & y apartir se interprete como otra variable? Para poder hacer que funcione ?site/login&error=1

Gracias!

Ok, tenía un pequeño error con el $match, pero esto debería regresar la primera palabra antes del =&.

Código (php) [Seleccionar]

$views = 'views/';
$site = $views . 'site/';
$user = $views . 'user/';

$time = microtime(true);

$includes = array(
'home' => $views . 'home.php',
'site/login' => $site . 'login.php',
'site/logout' => $site . 'logout.php',
'site/contact' => $site . 'contact.php',
'site/about' => $site . 'about.php',
'user/register' => $user . 'register.php',
'user/referral' => $user . 'referral.php',
'user/friend' => $user. 'friend.php',
'user/register_success' => $user . 'register_success.php'
);

preg_match('/^([\w\/]+)=?(\w+)?&?/', $_SERVER['QUERY_STRING'], $matches);
$matches[1] = isset($matches[1]) ? $matches[1] : null;

if(array_key_exists($matches[1], $includes)){
echo $includes[$matches[1]];

}


En cuanto a lo del ruteador, ya es preferencia si eliges crearte tu propio ruteador o usar el de otros. No necesitas cargarte todo un framework para implementar un ruteador, puedes usar por ejemplo una libreria:

https://github.com/dannyvankooten/PHP-Router
#2900
PHP / Re: crear enlaces seguros para las paginas php
25 Septiembre 2014, 17:22 PM
Si hay funciones que impriman dentro de tus includes pues entonces esas funciones se van a ejecutar, porque así funcionan los includes().

Código (php) [Seleccionar]

$content = include($file);


Se ejecuta $file y $content equivale 1.

Ahora si $file tiene:

Código (php) [Seleccionar]

$html = '<HTML></HTML>';
return $html;


$content ahora tiene <HTML></HTML>.

En cuanto a porque tus rutas no funcionan, es porque estás usando $_SERVER['QUERY_STRING']...

Si tienes:
Citar
index.php?site/login&error=1

Código (php) [Seleccionar]

$_SERVER['QUERY_STRING'];
//site/login&error=1 != site/login


Y no hace el include en site/login porque no hace match... $_SERVER['QUERY_STRING'] != site/login.

Puedes hacer:

Código (php) [Seleccionar]

preg_match('/^([\w\/]+)=?(\w+)?&?/', $_SERVER['QUERY_STRING'], $matches);

if(array_key_exists($matches[0], $includes)){


Debería hacer un match de la primera palabra en QUERY_STRING. Lo mejor sería manejar las variables GET por llave/valor.

Por ejemplo una url como:

Citar
index.php?do=home

Y en lugar de manejar $_SERVER['QUERY_STRING'] manejar $_GET['do'].

Yo digo que sería mejor tener una URL como:

http://sitio.com/site/login

En lugar de:

http://sitio.com/archivo.php?site/login

o

http://sitio.com/archivo.php?do=site/login

Y para eso puedes implementar un ruteador mejor y tener mas control sobre las urls, aunque tambien una simple regla de mod_rewrite basta.