captcha_temporal - Valor del captcha calculado por el sistema Salida: Aceptacion o rechazo del inicio de sesion con la redireccion al lugar correspondiente Ver tambien: <seguridad_clave> | <cambiar_clave> */ if ($PCO_Accion == "Iniciar_login") { //Filtra cadenas recibidas para evitar sql injection $uid_orig = $uid; $clave_orig = $clave; $captcha_orig = $captcha; $uid = filtrar_cadena_sql($uid); $clave = filtrar_cadena_sql($clave); $captcha = filtrar_cadena_sql($captcha); //Verifica el captcha ingresado por el usuario $ok_captcha = 1; if (@$captcha_temporal != $captcha) { $ok_captcha = 0; // Lleva auditoria con query manual por la falta de $Login_Usuario y solamente si no hay un posible sqlinjection if ($uid_orig == $uid && $clave_orig == $clave) { auditar("Elimina sesiones activas al intentar acceso con CAPTCHA incorrecto desde {$PCO_DireccionAuditoria}", $uid); } } session_destroy(); $ok_login = 0; // Inicia la autenticacion como una solicitud de webservices interna // Determina si la conexion actual de Practico esta encriptada if (empty($_SERVER["HTTPS"])) { $protocolo_webservice = "http://";
Variables de entrada: uid - Obligatorio: Login utilizado por el usuario clave - Obligatorio: Clave del usuario sin cifrar Salida: Archivo XML que contiene la propiedad de aceptacion en cero o uno (0,1) dependiendo de si las credenciales son o no validas. Complemento del archivo XML con datos generales del usuario como login, nombre, descripcion, nivel, correo y fecha de ultimo acceso Ver tambien: <Iniciar_login> | <cambiar_clave> */ if (@$PCO_WSId == "verificar_credenciales") { $uid = filtrar_cadena_sql(@$uid); $clave = filtrar_cadena_sql(@$clave); $salida_xml = ""; $ok_login_verifica = '0'; $error_parametros = 0; // Verifica parametros minimos para trabajar if ($uid == "" || $clave == "") { $error_parametros = 1; } //Verifica MOTOR autenticacion interna if (!$error_parametros && ($Auth_TipoMotor == "practico" || $uid == "admin")) { $ClaveEnMD5 = hash("md5", $clave); $registro = ejecutar_sql("SELECT {$ListaCamposSinID_usuario} FROM " . $TablasCore . "usuario WHERE estado=1 AND login=? AND clave=? ", "{$uid}{$_SeparadorCampos_}{$ClaveEnMD5}")->fetch(); if ($registro["login"] != "") { $ok_login_verifica = '1'; } }
function ejecutar_sql($query, $lista_parametros = "", $ConexionBD = "") { /* Function: ejecutar_sql Ejecuta consultas que retornan registros (SELECTs). Variables de entrada: query - Consulta preformateada para ser ejecutada en el motor lista_parametros - Lista de variables PHP con parametros que deben ser preparados para el query separados por $_SeparadorCampos_ ConexionBD - Determina si la consulta debe ser ejecutada en otra conexion o motor. Se hace obligatorio enviar parametros cuando se envia otra conexion Salida: Retorna mensaje en pantalla con la descripcion devuelta por el driver en caso de error Retorna una variable con el arreglo de resultados en caso de ser exitosa la consulta */ //Determina si se debe usar la conexion global del sistema o una especifica de usuario if ($ConexionBD == "") { global $ConexionPDO; } else { $ConexionPDO = $ConexionBD; } global $ModoDepuracion; global $MULTILANG_ErrorTiempoEjecucion, $MULTILANG_Detalles, $MULTILANG_ErrorSoloAdmin; global $PCO_Accion; global $PCOSESS_LoginUsuario, $_SeparadorCampos_; // Filtra la cadena antes de ser ejecutada $query = filtrar_cadena_sql($query); try { $consulta = $ConexionPDO->prepare($query); //Cuando se reciben parametros entonces se asume recepcion de querys con interrogaciones ? //que deben ser preparados antes de ejecutarse con cada uno de los parametros recibidos if ($lista_parametros != "") { $cantidad_parametros = substr_count($query, '?'); $parametros = @explode($_SeparadorCampos_, $lista_parametros); // if ($cantidad_parametros!=count($parametros)) //La cantidad de parametros en query es diferente a los recibidos //Recorre cada parametro y toma su valor for ($i = 1; $i <= $cantidad_parametros; $i++) { /* //Si no recibe valor en el parametro hace el bind con vacio para al menos hacerlo valido if($parametros[$i-1] == "") $consulta->bindValue($i,''); // $consulta->bindValue($i,PDO::PARAM_NULL); else */ $consulta->bindValue($i, $parametros[$i - 1]); //echo 'Parametro '.$i.'='.$parametros[$i-1]."<br>"; //PARA DEPURACION } } $consulta->execute(); return $consulta; //return $consulta->fetchAll(); } catch (PDOException $ErrorPDO) { //Muestra detalles del query solo al admin y si el modo de depuracion se encuentra activo if ($PCOSESS_LoginUsuario == 'admin' && $ModoDepuracion) { $mensaje_final = $ErrorPDO->getMessage() . '<br><b>' . $MULTILANG_Detalles . '</b>: ' . @completar_parametros($query, $parametros); } else { $mensaje_final = '<b>' . $MULTILANG_Detalles . '</b>: ' . $MULTILANG_ErrorSoloAdmin; } //Presenta el mensaje sobre el HTML y como Emergente JS mensaje($MULTILANG_ErrorTiempoEjecucion, $mensaje_final, '', 'fa fa-times fa-5x icon-red texto-blink', 'alert alert-danger alert-dismissible'); echo '<script type="" language="JavaScript"> alert("' . $MULTILANG_ErrorTiempoEjecucion . '\\n\\n' . $mensaje_final . '");</script>'; //Redirecciona segun la accion if ($PCO_Accion == "Iniciar_login") { echo '<form name="Acceso" action="' . $ArchivoCORE . '" method="POST"><input type="Hidden" name="PCO_Accion" value=""></form><script type="" language="JavaScript"> document.Acceso.submit(); </script>'; } return 1; } }