Foros del Web » Programando para Internet » PHP »

Como eliminar las variables (session_start();

Estas en el tema de Como eliminar las variables (session_start(); en el foro de PHP en Foros del Web. Hola y muy buenas a todos, no se si alguien tenga experiencias con un problema que es muy común pero que me he liado y ...
  #1 (permalink)  
Antiguo 17/06/2012, 16:33
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Como eliminar las variables (session_start();

Hola y muy buenas a todos, no se si alguien tenga experiencias con un problema que es muy común pero que me he liado y no encuentro ninguna solución.

Veamos si hay alguna mente generosa :D el DIA de hoy y si tengo suerte jeje.

Tengo un código sencillo que procesa un formulario para enviar sms gratis y que se encarga de enviar los datos por medio de CURL a un servidor externo, pero hay un usuario que por mas que tomo las medidas siempre se toma el tiempo de sacar mi usuario y contraseña que están definidos en el archivo que procesa el formulario en realidad todo esta en el Index.

Código PHP:
<?php
    session_name
("nombre_session");
    
session_start();
    
$secret=md5(uniqid(rand(), true));
    
$_SESSION['FORM_SECRET'] = $secret;
    
$_SESSION = array();
    require_once(
'recaptchalib.php');
    
//Llaves de la captcha
            
$captcha_publickey "xxxx";
            
$captcha_privatekey "xxx";
            
$error_captcha=null;
            if (
$_POST){
            
$captcha_respuesta recaptcha_check_answer ($captcha_privatekey,
            
$_SERVER["REMOTE_ADDR"],
            
$_POST["recaptcha_challenge_field"],
            
$_POST["recaptcha_response_field"]);
            if (
$captcha_respuesta->is_valid) {
            if(isset(
$_POST['enviar'])) { 
    
$username "xxxx";
    
$pass "xxxx";
    
$nop $_POST['pais'].$_POST['no'];
    
$mensaje stripslashes($_POST['mensg']);  
    
$len=strlen($mensaje);
    if(
$len>160){
        
$cSMS $len/160;
        
$cSMS number_format($cSMS,1);
        
$cSMS substr($cSMS,0,1);
    }else{
        
$cSMS=1;
    }
        
//-------------------------------------------------
    
$postdata "p_num_text=$nop&smstemplate=&message=$mensaje&txtcount=$len char : $cSMS Sms&hiddcount=153";
        if(
$nop!="" && $mensaje!=""){
            
$ch curl_init();
//------------- Login ------------------
            
curl_setopt($chCURLOPT_URL"http://subdomain.dyndns.org/usuario/index.php");
            
curl_setopt($chCURLOPT_REFERER"http://subdomain.dyndns.org/usuario/index.php");
            
curl_setopt ($chCURLOPT_POST1);
            
curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");
            
curl_setopt ($chCURLOPT_POSTFIELDS"app=page&inc=login&op=auth_login&username=$username&password=$pass");
            
curl_setopt ($chCURLOPT_COOKIEJAR"cookieb.txt");
            
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
            
$login curl_exec ($ch);
            
//----------------- Send SMS -------------------
            
curl_setopt($chCURLOPT_URL"http://subdomain.dyndns.org/usuario/index.php?app=menu&inc=send_sms&op=sendsmstopv_yes");
            
curl_setopt($chCURLOPT_REFERER"http://subdomain.dyndns.org/usuario/index.php?app=menu&inc=send_sms&op=sendsmstopv");
            
curl_setopt ($chCURLOPT_POST1);
            
curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");
            
curl_setopt ($chCURLOPT_POSTFIELDS$postdata);
            
//curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
            
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
            
$send curl_exec ($ch);
            
            
$search strpos($send"Your SMS has been delivered to queue");
            if(
$search===false){
                
$errSuc "<div class='blue'>Felicidades Tu Mensaje: $mensaje ha sido enviado Al numero: $nop exitosamente</div>";
            }else{
                
$errSuc "Message: $mensaje <br> To: $nop <br> Sent Successfully.";
                
                
//----------------------------------------------
            
}
            
        }
    }

        }else{
            
//El código de validación de la imagen está mal escrito.
            
$error "<div class='blue'>Has escrito mal el texto de verificación</div>";
            
$error_captcha $captcha_respuesta->error;
        }
    }
    if (
ini_get("session.use_cookies")) {
        
$params session_get_cookie_params();
        
setcookie(session_name(), ''time() - 42000,
                  
$params["path"], $params["domain"],
                  
$params["secure"], $params["httponly"]
                  );
    }
    
session_destroy();
    
?>
En Google Analytics estoy viendo busquedas similares a esta:
/index.php?PHPSESSID=c99472f14cb9db5f45cf228cc90d5e 48

¿Que opinan que tengo mal?

Gracias Y Saludos.

Última edición por MacintoshD; 17/06/2012 a las 16:35 Razón: Agregar Información y Corregir ortografía
  #2 (permalink)  
Antiguo 17/06/2012, 16:42
 
Fecha de Ingreso: marzo-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: Como eliminar las variables (session_start();

Así pensando un poco diría que no puedes. Porque esa información se envía sin encriptar y por el metodo POST, así que simplemente ese usuario esta usando FIREBUG y ve la petición que se genera.

La solución seria encrpiptar los datos que envías, pero si no controlas la "otra web" para que acepte los datos encrpytados...

Lo tienes dificil
  #3 (permalink)  
Antiguo 17/06/2012, 16:42
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Como eliminar las variables (session_start();

Si lo que queres es borrar variables de session te recomiendo que leas esto:

http://www.programacionweb.net/artic...iculo/?num=377
  #4 (permalink)  
Antiguo 18/06/2012, 03:36
Avatar de jpint  
Fecha de Ingreso: junio-2012
Ubicación: Ciudad Real - España
Mensajes: 97
Antigüedad: 11 años, 10 meses
Puntos: 12
Respuesta: Como eliminar las variables (session_start();

no se si te referiras a:

destruir la sesion:
sesion_destroy();
destruir una variable:
unset($_SESSION('variable'));
  #5 (permalink)  
Antiguo 18/06/2012, 18:56
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: Como eliminar las variables (session_start();

Hola, no entiendo porque PHP es tan inseguro en estas cosas, he seguido la guia de php y aun asi no me sirve:

Código PHP:
<?php
// Inicializar la sesión.
// Si está usando session_name("algo"), ¡no lo olvide ahora!
session_start();

// Destruir todas las variables de sesión.
$_SESSION = array();

// Si se desea destruir la sesión completamente, borre también la cookie de sesión.
// Nota: ¡Esto destruirá la sesión, y no la información de la sesión!
if (ini_get("session.use_cookies")) {
    
$params session_get_cookie_params();
    
setcookie(session_name(), ''time() - 42000,
        
$params["path"], $params["domain"],
        
$params["secure"], $params["httponly"]
    );
}

// Finalmente, destruir la sesión.
session_destroy();
?>
http://co.php.net/session_destroy
  #6 (permalink)  
Antiguo 18/06/2012, 19:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como eliminar las variables (session_start();

PHP NO es inseguro, claro, con algunas deshonrosas y raras salvedades, casi siempre los riesgos de seguridad son culpa del programador.

Por ejemplo, estás actuando para evitar el robo de sesiones, pero no veo que hagas una validación de usuario.

Código PHP:
Ver original
  1. // OK, estás iniciando sesión, no hay mayor problema
  2.     session_name("nombre_session");
  3.     session_start();
  4.     // Creas una cadena de validación (o eso creo)
  5.     $secret=md5(uniqid(rand(), true));
  6.     // Asignas esa cadena a variable de sesión
  7.     $_SESSION['FORM_SECRET'] = $secret;
  8.     // Eliminas todo lo que hay en variables de sesión!!!!
  9.     $_SESSION = array();
  10.     // Después de la línea anterior, no hay forma de saber si se trata de un usuario
  11.     // con sesión iniciada o si cuenta con los permisos para ingresar a la página

Por sí mismos, session_start() y el uso de $_SESSION no te garantizan seguridad en absoluto, simplemente te permite guardar variables para "compartirlas" entre diferentes páginas de tu sitio, la seguridad depende completamente de ti.

Te recomiendo buscar alguno de los aportes de sesiones que hay aquí mismo en FDW y con eso podrás evitar accesos no permitidos.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 18/06/2012, 20:16
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: Como eliminar las variables (session_start();

Hola Triby, la verdad no he dejado claro que el sistema no usa algún tipo de registro y login de usuario, por lo tanto no puedo validar si se trata de un usuario.

Si me puedes dar mas detalles te lo agradeceria, he buscado muchas guias y me he bajado varios formulario con el afán de aprender como funcionan pero no encuentro nada aun, el usuario me sigue enviando sms que tiene de nuevo la contraseña y el usuario.

¿Alguna sugerencia?
Saludos y Gracias.
  #8 (permalink)  
Antiguo 18/06/2012, 20:31
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: Como eliminar las variables (session_start();

Hola, sera que la vulnerabilidad se encuentra en el metodo para recoger la información del formulario "Request", ya que he leido y el hecho de usar Request puede provocar vulnerabilidades y fallos de seguridad, voy a ponerlo en practica, vamos aver si entre todos podemos solucionar esta vulnerabilidad.
Saludos y Gracias.
  #9 (permalink)  
Antiguo 18/06/2012, 20:44
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: Como eliminar las variables (session_start();

Creo que el error se encuentra aquí:
Código PHP:
curl_setopt ($chCURLOPT_POSTFIELDS"app=page&inc=login&op=auth_login&username=$username&password=$pass"); 
Como podemos ver de ninguna manera el usuario y contraseña se obtienen por el formulario o el parámetro POST. Así que opino que hay en el código anterior es donde esta la vulnerabilidad.

¿Que opinan Ustedes?
En el formulario solo recibe un numero de celular, código país y el cuerpo del mensaje.
  #10 (permalink)  
Antiguo 18/06/2012, 21:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como eliminar las variables (session_start();

No, la vulnerabilidad está en que no realizas alguna validación, por lo que cualquiera que conozca la dirección del formulario podrá procesarlo, es así de sencillo; al menos deberías asegurarte de que el formulario se procese solamente desde tu sitio, podrías usar $_SERVER['HTTP_REFERER'] (que no es del todo confiable, porque no todos los navegadores lo proporcionan) o alguna variable de sesión, creada al mostrar el formulario y la comparas antes de procesarlo.
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 18/06/2012, 21:34
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: Como eliminar las variables (session_start();

Cita:
Iniciado por Triby Ver Mensaje
No, la vulnerabilidad está en que no realizas alguna validación, por lo que cualquiera que conozca la dirección del formulario podrá procesarlo, es así de sencillo; al menos deberías asegurarte de que el formulario se procese solamente desde tu sitio, podrías usar $_SERVER['HTTP_REFERER'] (que no es del todo confiable, porque no todos los navegadores lo proporcionan) o alguna variable de sesión, creada al mostrar el formulario y la comparas antes de procesarlo.
Hola Toby, en el mismo archivo en que se recogen los datos del formulario se procesan los datos, el archivo en si es "index.php", ¿aun así tengo que realizar la validación?

De igual modo he pensado en esto:

Código PHP:
// recuperamos la información del campo oculto.
$form_secret = isset($_POST["form_secret"])?$_POST["form_secret"]:'';

if(isset($_SESSION["FORM_SECRET"])) {
    if(strcasecmp($form_secret, $_SESSION["FORM_SECRET"]) === 0) {



// Esto vendria entre <form></form>
<input type="hidden" name="form_secret" id="form_secret" value="<?php echo $_SESSION['FORM_SECRET'];?>" />
¿Que Opinas?
Saludos y Gracias,

Última edición por MacintoshD; 18/06/2012 a las 21:55 Razón: Agregar Información.
  #12 (permalink)  
Antiguo 19/06/2012, 10:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como eliminar las variables (session_start();

A ver, en realidad no tiene sentido crear una variable de sesión y colocar su valor en un campo oculto del formulario... es decir, siempre será enviada.

1. Al mostrar el formulario generas esa cadena secreta, almacenándola en variable de sesión.
2. Al procesar el formulario, primero verificas que exista esa cadena secreta en sesión, si no existe, entonces no procesas.

P.D. Soy Triby, no Toby
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: formulario, variables, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:28.