Autor Tema: ¿Vulnerable?  (Leído 1621 veces)

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
¿Vulnerable?
« en: 14 de Septiembre de 2011, 00:27:26 am »
Hola que tal?.. quería pasarme a pedirles un poquito de ayuda, que me han dicho de una forma indirecta que si estoy seguro de la seguridad de una parte de código de mi sitio web, en donde incluye $_GET.

Verán, los titulos del sitio web varían dependiendo de la sección en que este, y esas secciones se manejan a travéz de variables de URL, recogidas por $_GET.

Código:


<?
// Si fué abierto de forma de independiente
if(!isset($top)) { exit(); } elseif(isset($top)) { 
// Si esta incluido, declaramos las variables permitidas 
$sec_vars = array(&#39;t&#39;,&#39;f&#39;,&#39;a&#39;,&#39;c&#39;,&#39;faq&#39;,&#39;tyc&#39;,&#39;pp&#39;);
// Titulos
if(isset($_GET[&#39;s&#39;])&&!empty($_GET[&#39;s&#39;])){
if(in_array($_GET[&#39;s&#39;], $sec_vars)){
$t = &#39;Tienda online&#39;; 
$f = &#39;Foro&#39;; 
$a = &#39;Autor&#39;; 
$c = &#39;Contacto y soporte&#39;; 
$faq = &#39;Preguntas frecuentes&#39;; 
$tyc = &#39;Términos y condiciones de uso&#39;; 
$pp = &#39;Politica de privacidad&#39;;  
$title_ext $_GET[&#39;s&#39;];
$pag_title = $$title_ext; } else { $pag_title = &#39;¡Ups! - Esta sección no existe&#39;; } } elseif(isset($_GET[&#39;v&#39;])&&!empty($_GET[&#39;v&#39;])) {
$pag_title = &#39;Visor de videos&#39;; } elseif(!isset($_GET[&#39;s&#39;])|($_GET[&#39;v&#39;])|empty($_GET[&#39;s&#39;])|empty($_GET[&#39;v&#39;])) { $pag_title = &#39;Inicio&#39;; }
}
?>


La parte que dice $top es sobre si se esta incluyendo el archivo o se abrió de forma independiente, así que no presten atención a eso.. lo que me importa es si es posible que al hacer más adelante en el archivo, exactamente en el <head> - <title> el:

<? echo $pag_title?> 

Hay peligro alguno?.. ya que más adelante habrán consultas PHP|MySQL (solo consultas de tipo SELECT, nada de INSERT, UPTADE etc...

Desde ya muchas gracias por darle la mirada al código y observar el detalle. :)
Cubodi.com - Coming soon :)

Comunidad PHPeros

¿Vulnerable?
« en: 14 de Septiembre de 2011, 00:27:26 am »

Desconectado GuayAngel12

  • PHPero Experto
  • *****
  • Mensajes: 894
  • Karma: 17
  • Sexo: Masculino
  • Programador PHP, CSS, HTML...
    • Ver Perfil
    • GreeBool
Re:¿Vulnerable?
« Respuesta #1 en: 14 de Septiembre de 2011, 00:33:35 am »
Creo, y no me hagas mucho caso... de que no es vulnerable...

Ya que el if de in_array comprueba que el $_GET sea igual a los que estén dentro del array, y si no son iguales, no muestra nada, si quieres poner alguna alerta de hack, te recomiendo poner al final un else y un mensaje como "Intento de Hack".

De todas maneras, la mejor forma de saber si es vulnerable es que aprendas lo básico de hack y vayas probando con tus propios códigos.

Espero averte ayudado.

Saludos,
Ángel Q.

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
Re:¿Vulnerable?
« Respuesta #2 en: 14 de Septiembre de 2011, 00:37:10 am »
Creo, y no me hagas mucho caso... de que no es vulnerable...

Ya que el if de in_array comprueba que el $_GET sea igual a los que estén dentro del array, y si no son iguales, no muestra nada, si quieres poner alguna alerta de hack, te recomiendo poner al final un else y un mensaje como "Intento de Hack".

De todas maneras, la mejor forma de saber si es vulnerable es que aprendas lo básico de hack y vayas probando con tus propios códigos.

Espero averte ayudado.

Saludos,
Ángel Q.

Si! exacto! es que me parecía tan poco o más bien nulo, la probabilidad de pasar con ese if array... se ha creado exclusivamente para eso. y en cuanto a lo otro tienes razón, la mejor forma de evitar a un hacker, es pensar como uno. me ha servido de mucho tu opinión. gracias!
Cubodi.com - Coming soon :)

Desconectado GuayAngel12

  • PHPero Experto
  • *****
  • Mensajes: 894
  • Karma: 17
  • Sexo: Masculino
  • Programador PHP, CSS, HTML...
    • Ver Perfil
    • GreeBool
Re:¿Vulnerable?
« Respuesta #3 en: 14 de Septiembre de 2011, 00:39:12 am »
Si! exacto! es que me parecía tan poco o más bien nulo, la probabilidad de pasar con ese if array... se ha creado exclusivamente para eso. y en cuanto a lo otro tienes razón, la mejor forma de evitar a un hacker, es pensar como uno. me ha servido de mucho tu opinión. gracias!

Me alegro de que te haya servido, si necesitas ayuda, no dudes en publicarlo en un tema o mandarme un privado!

Saludos,
Ángel Q.

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
Re:¿Vulnerable?
« Respuesta #4 en: 14 de Septiembre de 2011, 00:42:56 am »
Me alegro de que te haya servido, si necesitas ayuda, no dudes en publicarlo en un tema o mandarme un privado!

Saludos,
Ángel Q.

Gracias, seguramente lo haré... no soy experto en PHP, solo lo manejo de forma "mecánica"  :P, y estoy haciendo mi web aún así siguiendo paso lento pero seguro, y tampoco creo que pueda tomarme el atrevimiento de crear un tema nuevo para cada una de las posibles mil dudas que vaya a tener.

En cuanto a este tema si alguien más quiere aportar algo más estaré pendiente igual.
Cubodi.com - Coming soon :)

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #5 en: 14 de Septiembre de 2011, 13:58:54 pm »

Hola Alejandro,

Trata de filtrar los $_POST y $_GET por htmlentities() (En caso que no intervenga SQL) y mysql_real_escape_string() (En caso de que si intervenga SQL).

Un saludo,
Siquillote.

#Fdo. Physlet

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #6 en: 14 de Septiembre de 2011, 16:07:36 pm »
Hola Alejandro,

Trata de filtrar los $_POST y $_GET por htmlentities() (En caso que no intervenga SQL) y mysql_real_escape_string() (En caso de que si intervenga SQL).

Un saludo,
Siquillote.

En este caso es totalmente innecesario.

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #7 en: 14 de Septiembre de 2011, 16:22:10 pm »

En este caso es totalmente innecesario.

Si, pero para futuros casos ya sabrá como prevenirse.

#Fdo. Physlet

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #8 en: 14 de Septiembre de 2011, 20:43:23 pm »
Hola,

Quería aprovechar para decir que mysql_real_escape_string() no es del todo seguro. Se puede bypassear en algunos casos.
Hay que hacer una combinación de mecanismos para poder asegurar del todo una query SQL.
Es algo extenso, pero solo recordad: usar sólo mysql_real_escape_string() NO ES SEGURO en todos los casos.

Saludo!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado GuayAngel12

  • PHPero Experto
  • *****
  • Mensajes: 894
  • Karma: 17
  • Sexo: Masculino
  • Programador PHP, CSS, HTML...
    • Ver Perfil
    • GreeBool
Re:¿Vulnerable?
« Respuesta #9 en: 14 de Septiembre de 2011, 21:04:39 pm »
Hola,

Quería aprovechar para decir que mysql_real_escape_string() no es del todo seguro. Se puede bypassear en algunos casos.
Hay que hacer una combinación de mecanismos para poder asegurar del todo una query SQL.
Es algo extenso, pero solo recordad: usar sólo mysql_real_escape_string() NO ES SEGURO en todos los casos.

Saludo!

Muchas gracias, yo también lo tendré en cuenta!

Saludos,
Ángel Q.

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
Re:¿Vulnerable?
« Respuesta #10 en: 15 de Septiembre de 2011, 04:47:53 am »
@CarlosRdrz
Citar
Hola,
Quería aprovechar para decir que mysql_real_escape_string() no es del todo seguro. Se puede bypassear en algunos casos.
Hay que hacer una combinación de mecanismos para poder asegurar del todo una query SQL.
Es algo extenso, pero solo recordad: usar sólo mysql_real_escape_string() NO ES SEGURO en todos los casos.
Saludo!

Bien! gracias, también lo tendré en cuenta. supongo que esos mecanismos no solo se refieren a las funciones que nos provee PHP, si no también la arquitectura de la web para filtrar esos datos. así que le trabajaré a esos puntos.


@Siquillote
Citar
Hola Alejandro,
Trata de filtrar los $_POST y $_GET por htmlentities() (En caso que no intervenga SQL) y mysql_real_escape_string() (En caso de que si intervenga SQL).
Un saludo,
Siquillote.

Gracias por tu aporte!, enseguida voy a leer esos "apartados" de ambas "funciones" para aprender a aplicarlas de ahora en adelante en esos casos de GET/POST. ya sabía que existian pero no estaba seguro para que servían.

Gracias a todos por sus aportes/opiniones y consejos.  :D
Cubodi.com - Coming soon :)

Desconectado nmartin021

  • PHPero Avanzado
  • ****
  • Mensajes: 250
  • Karma: 9
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #11 en: 15 de Septiembre de 2011, 19:43:02 pm »
Un consejo... es mejor usar

if(!$algo){ exit; }

que

if(!$algo){ exit; }else{
    
//codigo
}

Es por pura comodidad, ya que exit() para el script y, por lo tanto, lo que haya debajo no se ejecuta ;)

Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #12 en: 15 de Septiembre de 2011, 20:29:50 pm »
Un consejo... es mejor usar

if(!$algo){ exit; }

que

if(!$algo){ exit; }else{
    
//codigo
}

Es por pura comodidad, ya que exit() para el script y, por lo tanto, lo que haya debajo no se ejecuta ;)

Te equivocas, si la condición que no se ha de cumplir, se cumple ¿que pasa?. Se mostraría en blanco y el quiere añadir codigo por si se cumple la condición.

Saludos, si no me entiendes MP

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
Re:¿Vulnerable?
« Respuesta #13 en: 15 de Septiembre de 2011, 20:50:03 pm »
@nmartin021
Citar
Un consejo... es mejor usar
if(!$algo){ exit; }
que
if(!$algo){ exit; }else{
    //codigo
}
Es por pura comodidad, ya que exit() para el script y, por lo tanto, lo que haya debajo no se ejecuta

La verdad, no sé si te entiendo... y no sé si podrías explicarme es pura 'comodidad'... porque igual como dice @javipilo quiero ejecutar un código si existe esa variable, y si no existe pues nada... el navegador quedará en blanco.
Cubodi.com - Coming soon :)

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #14 en: 15 de Septiembre de 2011, 22:34:19 pm »

if(!isset($var)) { exit; }
echo &
#39;hola&#39;;


if(!isset($var)) { exit; } else {
echo &
#39;hola&#39;;
}

En ambos códigos se mostrará hola si $var no existe. Porque aunque el que no haya else significa que el código se ejecutará se cumpla la condición anterior o no.