| |||
Pues por poder se puede ... la tabla de "usuarios" es bien simple y sólo se trata de hacer consultas a ella via ODBC (www.php.net/odbc) (hablo de la parte principal aut_verifica.inc.php) Un saludo, |
| |||
Cita: El error sucede por no poder acceder al valor de "HTTP_REFERER" (la página referida) ..
Iniciado por PI0j0 Instale todo pero.. no me deja entrar al Admin... Usuario : Admin password admin cuando pongo eso me aparece Error cod.:1 - Acceso incorrecto! Algunos proxy's, configuraciones de seguridad de navegadores o si lo usas para autentificar una "popup" que abres con javascript .. por ejemplo .. no entregan dicha información para que la pueda acceder PHP .. Si eso te plantea problemas, puedes elminar el código que hace referencia a $_SERVER['HTTP_REFERER'] y su validación (ese if() que ahí veras en aut_verifica.inc.php) .. deja el valor de la variable $redir apuntando al URL que contenga tu formulario de login (http://www.tal.ta/formulario_login.php o donde corresponda). El resto de seguridad del script no se vé afectado por ese código. Dicha "validación" es una forma "rápida" de salir del script si se accede directamente a una página protegida (aunque insisto que se valida igualmente por las sesiones) .. también es una forma "automática" de mandar los mensajes de error en el login al formulario que los pide. Un saludo, |
| ||||
No Cluster, no, no se que tiene, me dice Warning: Cannot modify header information - headers already sent by el autentificator anda bien y me lleva la sesión a todos lados... pero si quiero meter otro header me tira ese error
__________________ Ignacio |
| |||
Cita: Si especificas concretamente el error (por qué ahí se te dice una línea concreta del script concreto) .. será lo ideal para ver el error.
Iniciado por ignacio_giri No Cluster, no, no se que tiene, me dice Warning: Cannot modify header information - headers already sent by el autentificator anda bien y me lleva la sesión a todos lados... pero si quiero meter otro header me tira ese error En principio .. no hay problema en hacer: session_start(); y luego un header ("Location ...."); que es básicamente lo que hace el "require("aut_verifica.inc.php")" que es donde está ese "session_Start()" .. Pero, al llamarlo por un "require()" o include .. junto con otros tal vez que puedas tener .. si hay un espacio al final de ?> de ese include() o de otros .. o un salto de línea .. eso ya estará ocasionando "salida" (envio de cabeceras) al navegador .. Eso es por poner un ejemplo .. por qué es necesario ver el error textual y exacto por qué ahí te dice bien claro en que línea se está ocasionado para que lo revises .. Un saludo, |
| ||||
página de aplicación: Código PHP: error que me tira: Código PHP: Código PHP:
__________________ Ignacio Última edición por ignacio_giri; 23/03/2005 a las 15:45 |
| |||
ignacio_giri Si pones el código fuera de su contexto (por qué extraes la parte que crees que está el error) .. y además me pones **** donde DICE! el error concreto .. así no sacamos nada .. Sólo te recomiendo que leas bien el error e intentes interpretarlo .. El problema te lo está diciendo ahí!!. Revisa lo que ya te he dicho antes . .un espacio antes o despues de un <? .. o un ?> o un salto de linea .. eso ya proboca "salida" que no puedes usarla . .Si hay archivos externos involucrados tendras que revisar todos. (eso es justamente lo que no se vé por qué pusistes ***********). Un saludo, |
| ||||
ok, ahora voy a revisar... disculpa, puse **** porque te había puesto el codigo tambien allí de cada pagina que tenía el error, ahora voy a revisar los espacios a ver que pasa. Saludos.
__________________ Ignacio |
| |||
Por cierto .. Si usas un ecriptador/ofuscador para PHP . .será mejor que si colocas código PHP aquí en el foro para verlo .. que no lo encriptes, sino complicas su lectura y seguimiento del mismo para evaluar un problem. Un saludo, |
| ||||
Gracias por todo Cluster, tu sistema de autentificación no tenía nada que ver con el problema que me estaba pasando, era que estaba usando una variable que la definia despues de usarla y me tiraba cualquier error... Gracias, segui así y mil disculpas por molestarte con esto que nada que ver... Excelente tu scritp de autentificación, es la primera vez que uso un sistema pre-hecho que tardo tan poco, parecía un código tan ordenado que lo entendía como si fuera mío... Gracias por todo, saludos!!!
__________________ Ignacio |
| |||
utilizo el script y necesito ayuda.... hola cluster, te felicito y te agradezco muchisimo ya que yo estoy utuilizando tu script y me funciona bien.... De verdad muchas gracias.... Quiciera que me ayudaras con unos aspectos ya que conoces... lo que pasa es que el nivel de acceso que tu definiste, lo estoy usando o lo quiero usar para cargar diferentes paginas(dependiendo del acceso), pero no me funciona, se queda cargando ..... te muestro lo que estoy haciendo: $nivel_acceso=0; // definir nivel de acceso para esta página. $u_n =$_SESSION['usuario_nivel']; if ($nivel_acceso != $u_n ){ if($u_n==1){ header ("Location: xxx.php"); exit; } else if($u_n==2){ header ("Location: xxyy.php"); exit; } else{ header ("Location: error.php?error_login=5"); exit; } } el otro problema que tengo es que quiero mantener no solo una, sino varias paginas bajo el control de la utenticacion, pero tampoco me ha servido....es deicr, lo que quiero es que despues de que el usuario se autentique, muestre una pagina "xxxyyy" y siga navegando hacia "otras pagina"(que se supone que tambien necesitan de autenticacion) y si el usuario no se a autenticado que no deje mostrar esas "otras paginas"...lo que estoy haciendo es lo siguiente: require ("aut_config.inc.php"); session_start(); if(!$_SESSION[$usuarios_sesion]) { header("Location: index.php?error_login=5"); exit; } pero tampoco funciona!!!.....si puedes ayudarme te lo agradeceria aun mas.... gracias.... |
| |||
Cita: Usa un switch() en lugar de tantos if() .. vas a "redireccionar" si tal nivel es = a tal valor ..
Iniciado por maec hola cluster, te felicito y te agradezco muchisimo ya que yo estoy utuilizando tu script y me funciona bien.... De verdad muchas gracias.... Quiciera que me ayudaras con unos aspectos ya que conoces... lo que pasa es que el nivel de acceso que tu definiste, lo estoy usando o lo quiero usar para cargar diferentes paginas(dependiendo del acceso), pero no me funciona, se queda cargando ..... te muestro lo que estoy haciendo: $nivel_acceso=0; // definir nivel de acceso para esta página. $u_n =$_SESSION['usuario_nivel']; if ($nivel_acceso != $u_n ){ if($u_n==1){ header ("Location: xxx.php"); exit; } else if($u_n==2){ header ("Location: xxyy.php"); exit; } else{ header ("Location: error.php?error_login=5"); exit; } } el otro problema que tengo es que quiero mantener no solo una, sino varias paginas bajo el control de la utenticacion, pero tampoco me ha servido....es deicr, lo que quiero es que despues de que el usuario se autentique, muestre una pagina "xxxyyy" y siga navegando hacia "otras pagina"(que se supone que tambien necesitan de autenticacion) y si el usuario no se a autenticado que no deje mostrar esas "otras paginas"...lo que estoy haciendo es lo siguiente: require ("aut_config.inc.php"); session_start(); if(!$_SESSION[$usuarios_sesion]) { header("Location: index.php?error_login=5"); exit; } pero tampoco funciona!!!.....si puedes ayudarme te lo agradeceria aun mas.... gracias.... La validación para otras páginas . . Código PHP: Es decir . .deberías validar esa página concreta por el nivel que corresponda su acceso Código PHP: Un saludo, Última edición por Cluster; 24/03/2005 a las 06:48 |
| ||||
puede ser que en Firefox pierda la sesión de logueo???? como puede ser que en Internet Explorer anda... Saben adonde la pierde... acá... es rarísimo entro a: http://www.sub.dominio/admin/index2.php?com=monedas y despues desde esa pagina sigo el link a: http://www.sub.dominio.com/admin/ind...m=monedas&id=1 y en vez de hacer lo que tiene que hacer me manda a la página de logueo... adonde estará el error. En Internet Explorer anda perfecto y en Firefox no....
__________________ Ignacio |
| |||
Cita: Lo primero es confirmar que esté propagando el SID en cookies y revisar tu navegador si acpeta cookies (y a que nivel) .. Por qué por ejemplo IE en sus "niveles de seguridad" define que tipo de cookies se registran automáticamente .. cuales no ... (no uso Firefox .. no sé como trabaja ese tema este .. pero revisalo usando niveles bajo de "seguridad" en el aspecto de la creación de cookies).
Iniciado por ignacio_giri puede ser que en Firefox pierda la sesión de logueo???? como puede ser que en Internet Explorer anda... Saben adonde la pierde... acá... es rarísimo entro a: http://www.sub.dominio/admin/index2.php?com=monedas y despues desde esa pagina sigo el link a: http://www.sub.dominio.com/admin/ind...m=monedas&id=1 y en vez de hacer lo que tiene que hacer me manda a la página de logueo... adonde estará el error. En Internet Explorer anda perfecto y en Firefox no.... Un saludo, |
| |||
hola acabo de descargar tu autentificador y voy a intentar instalarlo, pero despues de leer estas 10 páginas sólo me queda decirte gracias por tu dedicación, sinceramente cluster gracias y allá vooooyyy. |
| |||
hola Cluster, adhiero a las felicitaciones, si no es mucho pedirte, podrías poner ej. de como modificar el archivo aut_config.inc.php y el aut_instalar.php o el aut_usuarios.sql , vi en un ejemplo de un tuto de un phpbb2 o un nuke no recuerdo bien, es decir: // Datos conexión a la Base de datos (MySql) $sql_host="localhost"; // Host, nombre del servidor o IP del servidor Mysql. (acá http:// www.midominio.com o que? $sql_usuario=""; // Usuario de Mysql $sql_pass=""; // contraseña de Mysql $sql_db=""; // Base de datos que se usará. (acá???) $sql_tabla=""; // Nombre de la tabla que contendrá los datos de los usuarios ?> se entiende lo que pido? los que no tenemos ni idea de php ni mysql se nos hace un poquito más complicado y se que tu tuto está bien explicado pero quizás apunta a los que trabajan directamente desde los códigos. mil gracias y perdón pero somo muchos los que trabajamos desde dw y de códigos nada, aunque reconozco que deberíamos hacerlo. |
| ||||
Hola Cluster Me parece muy buen script, sin embargo unas notas: 1. $_SERVER['HTTP_REFERER'] ... es una variable que tiende a fallar segun la configuracion del cliente, entonces no es seguro usarla para validar, sin embargo si este sistema se aplica para el area de Administracion de un sitio, entonces esta bien, porque tu te aseguraras que las computadoras desde las cuales estas entrando, esten confugiradas correctamente para no caer en el error del REFERED 2. La base de datos me parece que puede mejorarse: CREATE TABLE usuarios ( ID smallint(6) unsigned NOT NULL auto_increment, usuario varchar(16) NOT NULL, pass varchar(16) NOT NULL, nivel_acceso smallint(4) unsigned NOT NULL default '0', PRIMARY KEY (ID), UNIQUE KEY ID (ID) ) TYPE=MyISAM PACK_KEYS=1; Yo uso varchar porque, si un usuario tiene como nombre solamente 5 caracteres, entonces solo 5 caracteres ocupara, ademas es mas facil un index sobre este campo. 3. El control de niveles esta bien, pero con ese control pones solamente para ZONAS, pero dentro de una zona existen muchos permisos que unos y otros usuarios no tienes... ejemplo basico: Niveles: 1 = Atencion a Clientes 2 = Administracio del sitio Subniveles: Dentro de Atencion a Clientes existen diversas actividades que no todo el personal puede tener acceso, como: 1. Contestar e-mails con preguntas 2. Editar cuentas 3. Procesar pagos. Dentro de Administracion del sitio 4. Editar Template de Noticias 5. Borrar Noticias 6. Resetear el servidor Entonces para estos casos las bases de datos son un poco mas complejas, pero respetando tu diseño actual, podria facilmente ser algo asi: CREATE TABLE usuarios ( ID smallint(6) unsigned NOT NULL auto_increment, usuario varchar(16) NOT NULL, pass varchar(16) NOT NULL, nivel_accesos varchar(16)NOT NULL, subnivel_accesos varchar(16) NOT NULL, PRIMARY KEY (ID), UNIQUE KEY ID (ID) ) TYPE=MyISAM PACK_KEYS=1 - Un usuario que puede entrar a la zona 1 y a todas las subzonas seria: nivel_accesos = "1" subnivel_accesos = "1,2,3" - Un usuario que puede entrar a la zona 1 y a zona 2 completamente, pero en cliente solo puede procesar pagos seria: nivel_accesos = "1,2" subnivel_accesos = "3,4,5,6" Es decir, el campo nivel acceso te da entrada a una zona, y el subnivel te dice de esa zona a cuales puede entrar. Respetando tu diseño de todo en una tabla esa seria la forma, en PHP lees los permisos y haces un split de las opciones y listo, tienes los permisos del usuario, estos permisos los pones en session, y en cada pagina revisas que el usuario tiene el acceso correcto para esa pagina en especial. Bueno, el sistema que te digo es muy parecido al que estoy utilizando yo ahortia y me ofrece mucha flexibilidad, sin embargo es un poco mas complejo debido a otros parametros que debo respetar. Espero que te sirvan mis comentarios, y repito muy buen script, pero creo que pudes mejorarlo en esos puntos. Suerte!! |
| |||
Neuron_376 .. 1) .. Tienes toda la razón .. de hecho ya lo había mencionado alguna vez .. Se trata simplemente de elminiar esa pre-validación que viene bien para aportar la funcionalidad de "devolver al formulario de login" los errore que puedas tener en el mismo. La seguridad no se vé afectada en absoluto .. pues para eso ya se validan las sesiones que se usan ... 2) ... Bueno .. eso ya va al gusto del "consumidor" .. En realidad el "ejemplo" sólo pretende dar una breve explicación al uso de sesiones con un ejemplo práctico. 3) .. Como comentarios .. OK, pero la filosofía del mismo ya la he descrito por aquí alguna vez y tambien en la documentación. Sólo se trata de validar "zonas" .. nada más. Es a nivel básico, de hecho mucha gente lo ha usado como base para desarrollar su sistema própio; añadiendo funcionalidades como que los usuarios se registren .. tablas relacionadas para crear un perfil del usuario (con más datos que los de la "cuenta" en sí ..) .. registro de eventos (login ..) .. control de concurrencia (que un usuario no pueda acceder más que determinado equipo en una red (IP/nombre máquina) o sólo una cuenta->un uso (no simultáneos desde otras estaciones) .. etc .. etc .. Por mi parte el script -es así- no tengo intenciones de añadir esas opciones, pero si que es bueno conocer esos comentarios por si alguien se encuentra en una situación similar y dese implementarlo .. adelante. Ya hace tiempo que "abandoné" el desarrollo del mismo (sólo vería temas -críticos- a nivel seguridad por ejemplo si los hubiese ..). Probablemente podría dedicar esfuerzos en una versión "Pro" con todas estas funcionalidades para crear un autentico sistema de "autentificación" versatil .. Pero como ya he comentado .. el script es un ejemplo de "uso" de sesiones aplicado a un ejemplo concreto más que nada; fijate por ejemplo lo "descuidado" que están los scripts de gestión de usuarios en sí (para crearlos .. etc) .. no era ese el objetivo pero .. es cierto que "había" que hacer algo así mínimo para demostrar el funcionamiento del miso en su conjunto. Insito una vez más, grácias por todos los comentarios. Un saludo, Última edición por Cluster; 29/04/2005 a las 11:34 |
| ||||
Hola Una nota mas... para el error de global='on' o globals='off', tengo entendido que esta directiva solamente hace esto: Con global='ON' $_SESSION["Var1"] = 3 $Var1 = 4 echo $_SESSION["Var1"] // Esto imprime 4, porque con global='on', todas esas variables pueden ser accesadas con el puro nombre. Con global = 'off' $_SESSION["Var1"] = 3 $Var1 = 4 echo $_SESSION["Var1"] // Esto imprime 3, porque con global='off', no accesas a esas variables con el puro nombre. Bueno, yo tengo entendido eso, entonces lo que hago para no tener problemas con esa directiva es que a mis variables de session siempre les pongo un nombre especial, por ejemplo: //Variable normal tipo entera intUsuarioID //Variable tipo sesion.. lo que cambia es que al tipo le agrego la s intsUsuarioID Entonces en mi script yo nunca uso nombres de variables de session revueltas, es decir $_SESSION["intsVar"] = 4; $intVar = $_SESSION["intsVar"] $intVar = $intVar + 1 $_SESSION["intsVar"] = $intVar; Bueno, esa es una logica de escritura que desarrolle basado en ese problema del global='on', entonces creo que de esa forma nunca tienes que preocuparte por afectar variables de session de forma incorrecta, lo mismo hago con cookies tambien, para estar seguro siempre, con POST y GET no hago eso, simplemente que siempre recupero el valor en una variable local y nunca uso el nombre de post y get como: $_COOKIES["intcVar1"] $strNombre = $_POST["Nombre"]; $strNombre = $_GET["Nombre"]; De esa forma no tengo problemas con la configuracion de esa variable... mi duda seria, si estoy olvidando algo y con el global = 'on' y 'off' se modifican otros criterios que deberia tener en cuenta para evitar errores futuros. Gracias. |
| |||
Cita: No es exactamente así .. Con global='ON' $_SESSION["Var1"] = 3 $Var1 = 4 echo $_SESSION["Var1"] // Esto imprime 4, porque con global='on', todas esas variables pueden ser accesadas con el puro nombre. Con global = 'off' $_SESSION["Var1"] = 3 $Var1 = 4 echo $_SESSION["Var1"] // Esto imprime 3, porque con global='off', no accesas a esas variables con el puro nombre. Con register_globals a ON .. $_SESSION y cualquier "indice" (como array que es) que llames tendrá el valor definido .. El hecho de usar a ON o a OFF afecta más bien a que si usas $_SESSION['variable'] == "algo" y en otro script accedes a $variable .. el valor de esta lo obtendras llegue donde llegue .. por eso si haces algo tipo (suplantando el método usando GET) tipo: nose.php?variable="valor_Adulterado" .. pese que lo has definido con $_SESSION .. es probable (no he probado esto exactamente . sólo con session_register() si que sé que ocurre) que tomes el valor que introduces por GET .. (haz tus pruebas y nos comentas). revisa también los comentarios de: http://www.php.net/manual/en/ref.session.php .. hay un documento en PDF interesante para que revises (en la versión ingles): http://www.acros.si/papers/session_fixation.pdf Un saludo, |
| ||||
Bien Ok, si tenia entendido que register globals afecta a todos los arreglos globales, puse session como ejemplo... pero bien, entonces lo que estas diciendo es esto: 1. pagina1.php //Declaro variable de session $_SESSION["intsVar"] = 2 2. pagina2.php //Recibe como parametro ?insVar=5 echo $_SESSION["intsVar"]; //Va a imprimir 5 porque globals esta en ON ? Dime si esa es la duda, porque me pusiste a pensar, si alguien conoce el nombre de mis variables de session, entonces con global = 'on' tendre un hueco de seguridad. Bien, dime si ese es el caso, si entendi bien eso es lo que piensas que puede pasar, de todas formas lo probare y les dire que obtuve |
| ||||
Resultado de la prueba Ok, lo probe... prueba.php?sesionvar=10&getvar=a echo $_GET["sesionvar"] . "<br>"; // Imprime 10 echo $_SESSION["sesionvar"] . "<br>"; // Imprime valor real 1 echo $_GET["getvar"] . "<br>"; // Imprime a echo $sesionvar . "<br>"; // Imprime 1 echo $getvar . "<br>"; // Imprime a echo $_SESSION["sesionvar"] . "<br>"; // Imprime 1 $sesionvar = $_GET["sesionvar"]; // Se asigna directo al arreglo de session echo $_SESSION["sesionvar"] . "<br>"; // Imprime 10 Entonces bien, al parecer por la misma razon de evitar esta falla de seguridad, cuando utilizas register_globals = on, las primeras asignaciones de variables ocurren directo para Session, Get y Post quedan en segundo termino, entonces la variable local creada apunta hacia session primero, si no existe entonces apunta hacia get como ocurre en el ejemplo. Esto asegura que el caso que comentabas Cluster no esta ocurriendo, que bueno, porque hubiera sido una falla de seguridad barbara, entonces bien, si queremos preparar nuestros scripts para no tener problemas con register_globals bastara con poner atencion de como usamos nuestras variables en el codigo, gracias. Suerte!! |
| |||
Excelente ! Hola Cluster Esto es justamente lo que estaba buscando... validar zonas. Estaba posteando por aquí hasta que me crucé con tu script, MUCHAS GRACIAS. Te consulto algo: Yo quiero aplicar restricciones por niveles al panel del Admin, es decir, que haya zonas dentro del panel de administración donde se necesite cierto nivel para acceder. Estoy trabajando sobre una web al "tanteo" porque los scripts php están encriptados y no conozco las variables ni los nombres reales de los archivos. Entonces... yo he agregado zonas al panel... ahí perfecto... aplico tu Autentificator Cluster y todo bien pero... en las secciones originales que apuntan a algo como http://www.misitio.com/admin.php?p=4... habría una manera de aplicar tu Script ??? Me parece que no pero sé poco y nada... necesito tu ayuda por favor. Cariños Última edición por Suyta; 04/05/2005 a las 11:30 |
| |||
No entendí que es eso que dices de trabajar al "tanteo" .. Como ya has visto .. para realmente autentificar un script o porción de código .. primero debes tener acceso a ese script (archivo) y código como para poder insertar el código que llama a aut_verifica.inc.php ... y las validaciones que necesites en función de tu nivel de acceso que tiene el usuario en la sesión activo ($_SESSION['usuario_nivel']) donde corresponda. Si no tienes acceso a esos scripts por A o B motivo .. no te sirve Autentificator (en su defecto tendrías que usar un .htaccess y .htpassword ...para hacer autentificación HTTP (si es que usas Apache como servidor HTTP)). Un saludo, |
| |||
Gracias por tu respuesta Cluster. Digo "al tanteo" porque debo agregar algunas utilidades y ciertas restricciones sobre una web pre-armada con php encriptados, de manera que no sólo no puedo acceder al código sino que ni siquiera sé el nombre real de cada archivo. Los procesos que agregué (con mucho esfuerzo) los puedo controlar pero sobre lo ya hecho parece que es imposible. Y creo que en este caso ni siquiera podría usar .htaccess pero deberé leer más al respecto. Más allá de todo esto tu Autentificator es de 10 Cariños. |
| ||||
Cluster! estoy en tu sistema de logueo... me logueo perfectamente, las variables y sessiones las toma perfecto... pero que paso ahora... en un formulario para agregar cosas a la BD... tiene un action="agregar.php" y ese "agregar.php" tiene un Header (Location:...)... y no lo hace... lo quiere hacer, pero pierde el logueo y me va de nuevo a la página de identificacion. que debería hacerle al "agregar.php" para que esto ante como debe ser? Saludos!!!
__________________ Ignacio |