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

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
Re:¿Vulnerable?
« Respuesta #15 en: 16 de Septiembre de 2011, 01:04:53 am »

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


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

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.

Si, porque igual a la primera con el exit(); abortaría la página no?

Disculpen si es mucho el atrevimiento mio para pedir este tipo de ayudas, pero no pretendo que ustedes me hagan la web ni mucho menos, solo que yo trato de construir los códigos y es bueno cuando me funcionan, pero aún más cuando otras personas con más experiencia en el campo me dan su visto bueno/malo...

Si quieren ayudarme con el siguiente punto estaría bien, si no es correcto o apropiado pedirlo en este foro solo deben decírmelo, pero desde ya mismo, muchas gracias...

En el siguiente código tengo como una especie de "check email", para más o menos tratar de filtrar textos o contenido sin intención y tratar de lograr siempre emails, el email a "checkear" se envia a travéz de POST con jQuery, es decir con .load();

Lo que trate de hacer con el código se irá explicando solo con los comentarios del php, espero que me entiendan...

<? 
// If hay un POST de email y email no es un valor vacio o igual al valor por defecto.
if(isset($_POST[&#39;email&#39;])&&!empty($_POST[&#39;email&#39;])&&$_POST[&#39;email&#39;]!=&#39;Suscríbete al boletín&#39;){
// Declarar la variable this_email que corresponde al $_POST[&#39;email&#39;]
$this_email htmlspecialchars($_POST[&#39;email&#39;]);
// Función para comprobar si es un email válido
function checkemail($this_email){
if(!
ereg("^([ña-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$",$this_email)){
// Retornar FALSE / TRUE de la función
return FALSE; } else { return TRUE; } }
if(
checkemail($this_email)){ 
// Es un correo
echo "Si es un correo"; } else { 
// No es un correo
echo "No es un correo"; }
// No hay $_POST[&#39;email&#39;] o si lo hay, este es igual a: &#39;Suscríbete al boletín&#39;
} else { echo "<b>¡Ups!</b> - La operación que tratas de ejecutar no es correcta."; } 
?>


La pregunta es... se puede optimizar más ese código para lograr un filtro máximo de emails o así esta bien/suficiente? .. o por el contrario.. está muy sencillo y poco efectivo?, de ser la primera o ultima opción.. ¿en donde podría o porque temas/funciones leer para optimizarlo?

Nuevamente gracias desde ya..  :)

ÚLTIMA EDICIÓN

ah por cierto... el htmlspecialchars lo usé pero pues entiendo que solo filtra el HTML... que más podría arriesgar aquí si antes en la página se ha abierto una base de datos, podrían hacer alguna acción maliciosa? que más filtros/funciones podría usar en este caso?
« Última modificación: 16 de Septiembre de 2011, 01:08:06 am por AlejandroKrevan »
Cubodi.com - Coming soon :)

Comunidad PHPeros

Re:¿Vulnerable?
« Respuesta #15 en: 16 de Septiembre de 2011, 01:04:53 am »

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #16 en: 16 de Septiembre de 2011, 14:58:37 pm »
Antes de nada, esas comprobaciones es mejor que las hagas en javascript, y que a php dejes solo el trabajo de comprobar si existe en la base de datos. Pero, una vez enviado el formulario, vuelves a revisar todo. ¿Por qué? Al usar JS alivias el trabajo que tendrá que hacer PHP, ya que tendría que comprobar todo cada vez que el user cambie el email, pero como javascript se puede saltar, al final debes hacer una revisión final.
Sobre optimizarlo:
- En el primer if, creo que bastaría con dejar la tercera condición.
- htmlspecialchars no es necesario, ya que luego con la expresión regular no coincidiria si tiene tags html
- No hace falta crear una función para la expresión regular, usa if(ereg(...)) y punto, aunque es conveniente que utilices preg_replace, ya que ereg ha sido eliminada en las últimas versiones de PHP.

Desconectado nmartin021

  • PHPero Avanzado
  • ****
  • Mensajes: 250
  • Karma: 9
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #17 en: 16 de Septiembre de 2011, 16:01:32 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.
No, porque exit(), al igual que die(), para el script. Y, en su caso, si no se cumple, para el script. Si $algo es false, se para, no se ejecuta lo que sigue. Es lo mismo que poner un else. Para eso están die y exit, para parar el script y no continuar, así se evita meter el código en un bloque else.

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #18 en: 16 de Septiembre de 2011, 17:44:52 pm »
No, porque exit(), al igual que die(), para el script. Y, en su caso, si no se cumple, para el script. Si $algo es false, se para, no se ejecuta lo que sigue. Es lo mismo que poner un else. Para eso están die y exit, para parar el script y no continuar, así se evita meter el código en un bloque else.
Antes de querer contradecirme, lee bien lo que digo, porque es lo mismo que has dicho tú.

Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #19 en: 16 de Septiembre de 2011, 20:03:04 pm »
No, porque exit(), al igual que die(), para el script. Y, en su caso, si no se cumple, para el script. Si $algo es false, se para, no se ejecuta lo que sigue. Es lo mismo que poner un else. Para eso están die y exit, para parar el script y no continuar, así se evita meter el código en un bloque else.

No se seas cabezón y prueba el código anda...

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:¿Vulnerable?
« Respuesta #20 en: 16 de Septiembre de 2011, 23:17:34 pm »
No se seas cabezón y prueba el código anda...
Puedes probarlo tú y comprobar como martin tiene razón.

Desconectado AlejandroKrevan

  • PHPer@ Fijo
  • ***
  • Mensajes: 182
  • Karma: 9
  • Sexo: Masculino
  • Cubodi.com :)
    • Ver Perfil
    • Cubodi
Re:¿Vulnerable?
« Respuesta #21 en: 17 de Septiembre de 2011, 00:24:23 am »
Muchas gracias a todos por la ayuda, bueno ya les he dado K+ por si depronto eso les interesa xD

Pero saben que.. me he decidido irme por lo más seguro, ya que no tengo mucha experiencia en esos temas de PHP y prefiero no arriesgarme.. así que en cuanto a eso del email lo he resuelto así:

1) Usé Feeds
2) Adapté el código del formulario que ellos dan y con una pequeña linea en jQuery hice que al escribir el correo y clicar sobre un supuesto 'botón' de enviar, se haga el submit. y se habra el pop up de suscripción por email de Feeds.

Así:

WEB EN REPOSO, MIENTRAS ESCRIBES EL EMAIL...



WEB CON POP UP DESPUÉS DE HABER PULSADO 'CONTINUAR'....



Creo que así me ahorro lo de programar el sistema de boletines etc, y los manejo con RSS... mientras tengo más experiencia en la seguridad de esa información.


Por cierto, les muestro esta imagen de nuevo para saber si me pueden sacar de una duda, creo que no va en PHP, si no es correcto que lo pregunte aquí me avisan, edito y creo un tema en el subforo correspondiente...

aquí esta la web, normal...



como pueden ver hay un botón que dice foro, pero al pulsarlo no quiero que se habrá en otra pestaña/página si no que se habar allí mismo.. uso SMF y me basta con integrar un iframe para que funcione, pero me pregunto si es posible que la altura del contenedor (lo que se extiende la página después de esa linea punteada), se adapte al iframe.. no solo al abrir el foro si no cuando se navege por cada tema etc.

es que la verdad no me atrae mucho la idea de ver esas scrollbars siempre.. aquí se ve bien pero porque la altura del iframe esta definida.. pero no siempre será igual..



Nuevamente gracias a todos, tendré que colocarlos en los créditos de la web de tanta ayuda xD
Cubodi.com - Coming soon :)