Foros del Web » Programando para Internet » PHP »

session_start(); como bloquear robo de sessiones

Estas en el tema de session_start(); como bloquear robo de sessiones en el foro de PHP en Foros del Web. Buenas noches, veamos tengo un usuario que me esta robando las sessiones o asi parece, tengo un archivo con un formulario index.php y el que ...
  #1 (permalink)  
Antiguo 09/06/2012, 17:35
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
session_start(); como bloquear robo de sessiones

Buenas noches, veamos tengo un usuario que me esta robando las sessiones o asi parece, tengo un archivo con un formulario index.php y el que lo procesa es send.php, pero el usuario tiene acceso a send.php desde su web, es decir me esta robando desde una web externa.

en el index.php que tengo inicia de la siguiente manera:
Código PHP:
session_start();
$form_secret=md5(uniqid(rand(), true));
$_SESSION['FORM_SECRET'] = $form_secret
Y el archivo send.php inicia de la siguiente manera:

Código PHP:
session_start();
//Retrieve the value of the hidden field
$form_secret = isset($_POST["form_secret"])?$_POST["form_secret"]:'';

if(isset(
$_SESSION["FORM_SECRET"])) {
    if(
strcasecmp($form_secret$_SESSION["FORM_SECRET"]) === 0) { 
Que puedo estar haciendo mal!!
Gracias y Saludos.
  #2 (permalink)  
Antiguo 09/06/2012, 17:41
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: session_start(); como bloquear robo de sessiones

mmm, no es posible robar sesiones como tal, para esto tendría que tener acceso directo al hosting, ahora, tu "sistema de seguridad" es relativo, con curl hago una petición a index.php y así obtengo la cookie con el SSID de la sesión, posteriormente puedo acceder directamente a send.php y el sistema crerá que soy un usuario común, por lo tanto, de seguridad no tiene mucho, lo que podrías hacer es colocar un sistema "captcha" para verificar que el usuario al menos tenga que leer una imagen o responder una pregunta lógica, lo que aleja sistemas de bots "caseros" o "sencillos"
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 09/06/2012, 17:44
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: session_start(); como bloquear robo de sessiones

Autentifica al usuario mediante un registro, usuario y contraseña.

Saludos.
__________________
http://www.latinium.com.ar/
  #4 (permalink)  
Antiguo 09/06/2012, 18:16
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: session_start(); como bloquear robo de sessiones

Cita:
Iniciado por Nemutagk Ver Mensaje
mmm, no es posible robar sesiones como tal, para esto tendría que tener acceso directo al hosting, ahora, tu "sistema de seguridad" es relativo, con curl hago una petición a index.php y así obtengo la cookie con el SSID de la sesión, posteriormente puedo acceder directamente a send.php y el sistema crerá que soy un usuario común, por lo tanto, de seguridad no tiene mucho, lo que podrías hacer es colocar un sistema "captcha" para verificar que el usuario al menos tenga que leer una imagen o responder una pregunta lógica, lo que aleja sistemas de bots "caseros" o "sencillos"
Gracias por responder, he tratado de realizar acciones para evitar el robo por cookies, funcino por unas horas, pero ahora ha vuelto a tomar este usuario acceso como un usuario normal:

Código PHP:
 ini_set("session.use_cookies"0);
 
ini_set("session.use_trans_sid"1); 

Este es el archivo completo, lo que hace es recivir desde un formulario, un numero de telefono, pais y mensaje, para procesarlo y enviarlo por medio de una API que acutalmente compre, un pequeño paquete de SMS gratis.
Código PHP:
<?php
    ini_set
("session.use_cookies"0);
    
ini_set("session.use_trans_sid"1);
   
session_start();
//Retrieve the value of the hidden field
$form_secret = isset($_POST["form_secret"])?$_POST["form_secret"]:'';

if(isset(
$_SESSION["FORM_SECRET"])) {
    if(
strcasecmp($form_secret$_SESSION["FORM_SECRET"]) === 0) {
       
//---------- Login Information --------
$username "usuario";
$pass "contraseña";
//---------------------------------------

//-------------- Sms sending information ----------
$no $_POST['no']; // Phone number without country code.
$msg stripslashes($_POST['msg']); // Message body

$len=strlen($msg);

if(
$len>160){
//$result="<num>3</num><txt>".$lang_en['status_len_exc']."</txt>";
//ending($result);
    
$cSMS $len/160;
    
$cSMS number_format($cSMS,1);
    
$cSMS substr($cSMS,0,1);
}else{
    
$cSMS=1;
}
//-------------------------------------------------



$postdata "p_num_text=$no&smstemplate=&message=$msg&txtcount=$len char : $cSMS Sms&hiddcount=153";

if((
$no!="") && ($msg!="")){
$ch curl_init();

//------------- Login ------------------

curl_setopt($chCURLOPT_URL"http://url.dyndns.org/index.php");
curl_setopt($chCURLOPT_REFERER"http://url.dyndns.org/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"9876578jhsdb.txt");
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
$login curl_exec ($ch);
//-------------------------------------------

//----------------- Send SMS -------------------
curl_setopt($chCURLOPT_URL"http://url.dyndns.org/index.php?app=menu&inc=send_sms&op=sendsmstopv_yes");
curl_setopt($chCURLOPT_REFERER"http://url.dyndns.org/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, '9876578jhsdb.txt');
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
$send curl_exec ($ch);

$search strpos($send"Your SMS has been delivered to queue");

if(
$search===false){
$errSuc "Mensaje: $msg <br> To: $no <br> Tu mensaje ha sido enviado - menwes.com";
}else{
$errSuc "Message: $msg <br> To: $no <br> Sent Successfully.";

//----------------------------------------------
}
curl_close ($ch);
}
        unset(
$_SESSION["FORM_SECRET"]);
    }else {
        
//Invalid secret key
    
}
} else {
    
//Secret key missing
    
echo "<center><b><font color='#FF0000'>Your Message has already been processed!</font></b></center> ";
}
?>
Que opinan!!

Gracias y Saludos.
  #5 (permalink)  
Antiguo 09/06/2012, 18:25
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: session_start(); como bloquear robo de sessiones

Insisto autentica al usuario y fijate que este logueado.

Saludos.
__________________
http://www.latinium.com.ar/
  #6 (permalink)  
Antiguo 09/06/2012, 18:45
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: session_start(); como bloquear robo de sessiones

Cita:
Iniciado por elgoncho99 Ver Mensaje
Insisto autentica al usuario y fijate que este logueado.

Saludos.
Hola, es una alternativa pero aun asi, aun no encuentro la razon por la cual el usuario esta enviando SMS desde un sitio externo implementando los datos del archivo send.php de mi servidor, he cambiado las contraseñas, el nombre del archio y tomado todas las medidas preventivas, pero aun asi, vuelve y nos toma el codigo, agradeceria cualquier aporte, por ahora la unica solución es usar un captcha.

Gracias y Saludos.
  #7 (permalink)  
Antiguo 09/06/2012, 18:48
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: session_start(); como bloquear robo de sessiones

Cita:
Iniciado por elgoncho99 Ver Mensaje
Insisto autentica al usuario y fijate que este logueado.

Saludos.
Eso no solucionará el problema, al menos no si se puede crear usuarios gratuitamente...

La forma mas facil de eliminar "bots" (que es lo que esta accediendo a tu sistema) y que al menos tarde bastante en "actualizar" su sistema es un sistema de captchas, puedes implementar el común, el de escribir en una imagen un texto aleatorio, o puedes usar un sistema de captcha lógico, muestra una serie de imagenes random y pregunta su contenido, o cosas por el estilo, el mas complicado de romper (en términos de programación) es el lógico, por muy avanzado es extremadamente difícil que un sistema reconozca por ejemplo un objeto dentro de una fotografia, algo sumamente sencillo para un humano...

Actualización: Por cierto, también deberías implementar un filtro por IP y tal vez por user agent
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 09/06/2012 a las 19:15
  #8 (permalink)  
Antiguo 12/06/2012, 22:05
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: session_start(); como bloquear robo de sessiones

Hola, Muchas gracias a los que me instruyeron en el tema, implemente un sistema Captcha y todo solucionado.

Gracias y Saludos.

Etiquetas: bloquear, formulario, robo, sesiones, 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 11:38.