Buenas,
Después de leer el interesante aporte
http://www.forosdelweb.com/f18/aport...equest-724214/
Creo que lo estoy haciendo bien, pero la página con la que intento validar debe tener algo que me impide validarme con CURL directamente.
Lo mejor de todo es que lo estoy probando en local contra un panel interno que diseñé, por lo que puedo ver exactamente como se realiza la validación para entrar.
Script de curl
Código PHP:
Ver original<?php
$postvalue['user'] = 'test';
$postvalue['password'] = '123456';
$postvalue['submit'] = 'Iniciar Sesión';
$url = "http://panelme.com/index.php"; // escribe aqui la url de tu formulario
$ch = curl_init(); // Inicializo el handler de Curl //Seteo las opciones para el envio
curl_setopt($ch, CURLOPT_URL
,$url); // Url a donde se va a postea. curl_setopt($ch, CURLOPT_USERAGENT
, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'); //Seteo el user Agent en este caso es el navegador firefox 2 curl_setopt($ch, CURLOPT_FAILONERROR
, 1); //terminar en caso de error curl_setopt($ch, CURLOPT_FOLLOWLOCATION
, 1);// Permitir Redirecciones curl_setopt($ch, CURLOPT_RETURNTRANSFER
,1); // Retornar la pagina de resultados en una variable curl_setopt($ch, CURLOPT_POST
, 1); // SETEAR el Envio por POST curl_setopt($ch, CURLOPT_POSTFIELDS
, $postvalue); //cargo los datos del formulario $result = curl_exec($ch); // Ejecutar el envio por post.
echo "<pre>";
echo $result;
echo "</pre>";
?>
Cuando lo lanzo me muestra el codigo de la pagina de login y pass
Y este es el script que corre al otro lado para validar la entrada
Código PHP:
Ver original<?
/*
Autentificacion de usuarios
Autor: neodani
*/
// Cargar datos conexion y otras variables.
include ("config_BD.inc.php");
include("getRealIP.inc.php");
$ip=getRealIP();
// chequear página que lo llama para devolver errores a dicha página.
$url = explode("?",$_SERVER['HTTP_REFERER']); $pag_referida=$url[0];
$redir=$pag_referida;
function Redirigir_error($num_error) {
$_SESSION['error']=$num_error;
Header ("Location: /entrada_login.php"); }
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die (Header ("Location: /error/ruta_incorrecta.php")); }
// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['password'])) { $user = trim($_POST['user']); $pass = trim($_POST['password']); // eliminamos barras invertidas y dobles en sencillas
// encriptamos el password en formato md5 irreversible.
if(($user == '') or ($pass == '')){
$_SESSION['error']=7;
}
else{
$query="SELECT * FROM panelme_usuarios WHERE usuario='$user'";
$db_conexion=@mysql_connect($sql_host,$sql_usuario,$sql_pass) or
die(Redirigir_error
(0) );
$usuario_consulta=@mysql_db_query($sql_db,$query,$db_conexion) or
die(Redirigir_error
(1) );
Header ("Location: $redir"); //si no existe el usuario error redirijimos error. $_SESSION['error']=13;
$query2="SET time_zone = '+1:00'";
$usuario_consulta2=@mysql_db_query($sql_db,$query2,$db_conexion) or
die(Redirigir_error
(1) ); $query1="insert into panelme_accesos (fecha,ip,usuario,password,valido) VALUES (now(), '$ip', '$user', '$pass',1)";
}else
{ //El usuario EXISTE.
$_SESSION['user']=$_POST['user'];
// almacenamos datos del Usuario en un array para empezar a chequear.
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
if($usuario_datos["password"]==$pass){
/* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */
$query1="insert into panelme_accesos (fecha,ip,usuario,password,valido) VALUES (now(), '$ip', '$user', '$pass',0)";
// cerramos la Base de dtos.
// Paranoia: destruimos las variables login y password usadas
// le damos un mobre a la sesion.
// incia sessiones
// Paranoia: decimos al navegador que no "cachee" esta página.
// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas
// definimos variables de sesion.
$_SESSION['usuario_id']=$usuario_datos['id'];
$_SESSION['usuario_login']=$usuario_datos['usuario'];
$_SESSION['usuario_password']=$usuario_datos['pass'];
$_SESSION['usuario_ip']=$ip;
$_SESSION['nivel_acceso']=$usuario_datos['nivel_acceso'];
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
Header("location: /index.php"); }else {
Header ("Location: $redir"); //password incorrecto $_SESSION['error']=13;
$query1="insert into panelme_accesos (fecha,ip,usuario,password,valido) VALUES (now(), '$ip', '$user', '$pass',1)";
// cerramos la Base de dtos.
}
}
}
}else {
// -------- Chequear sesión existe -------
// usamos la sesion de nombre definido.
// Iniciamos el uso de sesiones
// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.
if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){ // Borramos la sesion creada por el inicio de session anterior
die (Header ("Location: /error/ruta_incorrecta.php")); }
}
?>
En un principio creía que lo que podía estar fastidiandome sería este trozo
Código PHP:
Ver original// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die (Header ("Location: /error/ruta_incorrecta.php")); }
Pero al ver que cuando hago la ejecución del script en CURL no se descarga el código de la web de error, entiendo que esta validación la hace bien y no entra en ese if.
¿Veis algo que se me escape?
El formulario no envia ninguna variable hidden ni utiliza cookies.
Gracias de antemano!