Foros del Web » Programando para Internet » PHP »

necesito orientacion para programar seguridad

Estas en el tema de necesito orientacion para programar seguridad en el foro de PHP en Foros del Web. buenas!! tengo este problema, me encargaron hacer un sistema de control de miembros de un club social en donde el sistema le crea un numero ...
  #1 (permalink)  
Antiguo 24/10/2008, 13:15
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Pregunta necesito orientacion para programar seguridad

buenas!!


tengo este problema, me encargaron hacer un sistema de control de miembros de un club social en donde el sistema le crea un numero combinacion de nombre, edad, ciudad, etc. y sin problema
la base esta perfecta y todo funcionando sin problemas
ahora el detalle es que me piden que ahora le incluya restricciones para ciertos miembros
por ejemplo:

usuario
coordinadore
jefes de area
directores
y administrador

se me ocurrio crear una base nueva en donde le de privilegios los los nombres
y tambien ahi no tengo problema porque le cree 1 ,2,3,4,5 en los diferentes niveles
asi el nivel 5 tiene acceso total y de ahi para abajo al usuario que solo tiene acceso a una sola area del sitio

bueno... mi problema concreto esta en esto

cada jefe de area tiene un area para controlar entonces necesito que cuando un jefe de area solicite por ejemplo un listado de sus miembros este solo pueda ver los que le corresponda y no todos
el caso es que no puedo agregar otro campo a la tabla actual porque lo mas simple era agregar un campo con el grupo y listo solo hacer la comparacion
como puedo sacar el listado de los grupos para cada jefe sin nada mas que su "codigo" de miembro

el codigo de miembro es similar a esto : YUCG1MATT23
YUC = ciudad
G= de grupo
1 = numero del grupo
MATT = iniciales de su nombre
23 = un numero consecutivo de miembro

obviamente el jefe del grupo 1 solo podria ver a los miembros de su grupo
pero tambien me surge otra duda
que pasaria con los grupos que son de 2 o 3 digitos como el 12 o el 123

alguna idea u orientacion???

obviamente todo esto en PHP

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #2 (permalink)  
Antiguo 24/10/2008, 13:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: necesito orientacion para programar seguridad

Hola HalconVigia,

MySQL tiene herramientas por ejemplo para usar SUBSTR con el puedes sacar una parte de la cadena, y asi checar, por otro lado te recomiendo estandarizar, si vas a tener grupos de 3 digitos entonces trata de que la clave sea YUCG001MATT23, así es más facil para buscar los grupos.

Saludos.
  #3 (permalink)  
Antiguo 24/10/2008, 13:27
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: necesito orientacion para programar seguridad

Hola HalconVigia, cómo vas??

Realmente esto que necesitas, es mejor hacerlo directamente con la DB mas que con php.

Por qué dices que no puedes agregar un campo?? No tienes permisos?? Trata de realizar tu módulo de seguridad creando las tablas o campos necesarios, créeme que te ahorrará mucha programación

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 24/10/2008, 22:05
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: necesito orientacion para programar seguridad

buenas!!!

pues de ir... dejame decirte que nada :(

mira si puedo crearlo porque tengo los permisos el problema es que la estructura de la tabla actual de registros es "intocable" por decir de alguna manera ya que hacer un cambio a esa tabla me implicaria mover mas de 50 archivos o mas que tienen relacion con la tabla (ahora que lo pienso creo que por eso hicieron que hagamos primero esa estructura :s )

el caso que en mi tabla de "seguridad" puedo crear los campos que sean necesarios en donde ya cree
nombre
cargo
grupo <--- que este pueda listar exclusivamente a los que pertenezcan a su grupo
nivel <--- que aqui es donde pienso poner los permisos
correo
status <--- aqui si esta activo o inactivo ya que el registro de los miembros no se deve poder borrar

por lo que comenta gatorV realmente esa seria una solucion perfecta, el dato es que ya existen registros con G1 con G12 y con G123
osea que tampoco puedo solamente cambiar el registro :s
que eso ya lo habia pensado dejame decirte, no conocia la opcion que comenta pero la opcion de 001, 012 y 123 ya habia sido una opcion el dato es que no esta asi actualmente y tengo que tratar de solucionarlo como esta la base actualmente

alguna idea?
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #5 (permalink)  
Antiguo 25/10/2008, 11:45
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 17 años, 7 meses
Puntos: 5
Respuesta: necesito orientacion para programar seguridad

Entonces comprueba si tiene X cantidad de digitos, y que el substr se aplique de X a Z caracteres dependiendo de la cantidad de digitos.

Me explico, por ejemplo.. si AABBCC123 tiene 9 caracteres, entonces substr lo usaré así " substr('AABBCC123', 7, 9); ", y el que es AABBCC12, será " substr('AABBCC12', 7, 8); ".... Simple.. :D...

Adiós.

PD: La función para contar los caracteres de una cadena es strlen();
  #6 (permalink)  
Antiguo 25/10/2008, 14:04
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: necesito orientacion para programar seguridad

buenas!!

ok, entiendo pero aqui me suge una duda
como sabra el script cuando tiene que poner 1,2 o 3 digitos??

entiendo que con el substr saco los caracteres pero... como sabra el script cuando sacar cuantos

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #7 (permalink)  
Antiguo 25/10/2008, 14:33
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: necesito orientacion para programar seguridad

Hola,

Podes hacer que cuente los digitos, que saque digito por digito: el ultimo, anteultimo, etc y verifique que sea numerico. De ese modo sabras cuantos digitos tiene que leer.

O en todo caso, si te es mas simple, podes hacer que los grupos sean: 000, 001, 002, etc y que simpre lea los ultimos 3 numeros...

es lo que se me ocurre....

Saludos Y suerte
  #8 (permalink)  
Antiguo 25/10/2008, 20:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: necesito orientacion para programar seguridad

Creo la función que te propone KekoGrama es la mejor, cuenta el número de caracteres en el campo y así puedes saber de cuantos dígitos es tu grupo y así puedes aplicar el substr.

Ahora como este tipo de operaciones son costosas en un solo SELECT, te recomiendo hacer un Stored Procedure en la base de datos y así puedes hacer una consulta más optima.

Saludos.
  #9 (permalink)  
Antiguo 25/10/2008, 21:13
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: necesito orientacion para programar seguridad

buenas!!!

muchas gracias por sus comentarios a todos!! en serio que son de mucha ayuda

ahora solo un pequeño detalle GatorV este ultimo comentario ya se salio de mis humildes conocimientos, no se si seria mucha molestia de un poco o mejor dicho un mucho de explicacion un poco mas sencilla

ya que mis conocimientos tanto de bases como de php aun no son muy altos y esto ultimo aun no aprendo a manejarlo, de hecho no tengo mucha idea :s

recomiendame algun sitio para documentarme o algun ejemplo para tener una base de partida si no es mucha molestia

un saludo y de nuevo muchas gracias a todos por responder!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #10 (permalink)  
Antiguo 25/10/2008, 21:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: necesito orientacion para programar seguridad

En el manual de MySQL puedes encontrar mucha información al respecto.

Saludos.
  #11 (permalink)  
Antiguo 26/10/2008, 13:53
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: necesito orientacion para programar seguridad

Cita:
Iniciado por HalconVigia Ver Mensaje
como sabra el script cuando tiene que poner 1,2 o 3 digitos??
entiendo que con el substr saco los caracteres pero... como sabra el script cuando sacar cuantos
Si tienes los códigos de miembro ya recuperados a través de una consulta, yo creo que las expresiones regulares pueden ser la solución para tu problema. Estoy estudiándolas ahora para aprender cómo van y me sorprendo de lo potentes y fáciles que son de usar.

A modo de ejemplo, usando el formato de miembro que apuntabas (ciudad+grupo+user+codigo), he probado con un script para ver si era capaz de separar todos los componentes del miembro... y la verdad es que es inmediato, y no depende de la longitud de cada uno de los apartados, lo descompone igualmente:

Código PHP:
<?php

    
function descomponer$miembro )
    {
        
$patron  "/^([a-z]+)G(\d+)([a-z]+)(\d+)$/i";

        if ( 
preg_match$patron$miembro ) )
        {
            
$desglose["user"] =   preg_replace$patron"$3"$miembro);
            
$desglose["grupo"] =  preg_replace$patron"$2"$miembro);
            
$desglose["codigo"] = preg_replace$patron"$4"$miembro);
            
$desglose["ciudad"] = preg_replace$patron"$1"$miembro);
            return 
$desglose;
        }
        return 
false;
    }

    
print_rdescomponer("YUCG1MATT23") );
    
print_rdescomponer("YUUCCCG1234MATTTTTT234567") );
?>
Y el resultado de la ejecución del script devuelve:

Código:
Array
(
    [user] => MATT
    [grupo] => 1
    [codigo] => 23
    [ciudad] => YUC
)
Array
(
    [user] => MATTTTTT
    [grupo] => 1234
    [codigo] => 234567
    [ciudad] => YUUCCC
)
Incluso identifica si algún código de miembo no tiene el formato correcto devolviendo "false". Si crees que es una alternativa, te animo a que repases alguno de los muchos tutoriales que hay por ahí sobre expresiones regulares.

Un saludo!

Última edición por Deschamps; 26/10/2008 a las 16:01
  #12 (permalink)  
Antiguo 27/10/2008, 11:16
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: necesito orientacion para programar seguridad

buenas!!

muchisimas gracias deschamps porque de verdad que no tenia idea de como empezar, voya desarrollar el script obviamente con las consultas y todo lo referente al proceso y tratare de adaptar los parametros que me das obviamente documentandome mas al respecto y ya comentare por aqui los resultados

igual manera muchas gracias a todos por responder

ya les tendre con informacion por si a alguien mas le piden una locura asi :p

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #13 (permalink)  
Antiguo 05/11/2008, 19:30
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: necesito orientacion para programar seguridad

buenas!!

regreso con mi problema de indentificacion
no habia escrito por aqui porque habia estado probando e investigando mas ademas que me jugo sucio mi salud :( pero ya estoy de nuevo

mi problema es que no encuentro como comparar la extraccion
ya esta casi todo hecho pero la comparacion no la hace a la hora del listado y me lista todo
aqui les pongo el codigo para que algun Guru me oriente de mis errores

porque la verdad me esta dando mucho trabajo aprender este concepto de los arrays :(

Código:
<? include("../registros/ident.php");?>
<HTML>
<HEAD>
 <TITLE>Listado Total de Miembros del Grupo Registrados</TITLE>
</HEAD>
<BODY>

<?php
    $valor="QROG23ASES345";
    
    function descomponer( $miembro )
    {
        $patron  = "/^([a-z]+)G(\d+)([a-z]+)(\d+)$/i";

        if ( preg_match( $patron, $miembro ) )
        {
            $desglose["user"] =   preg_replace( $patron, "$3", $miembro);
            $desglose["grupo"] =  preg_replace( $patron, "$2", $miembro);
            $desglose["codigo"] = preg_replace( $patron, "$4", $miembro);
            $desglose["ciudad"] = preg_replace( $patron, "$1", $miembro);
            return $desglose;
        }
        return false;
    }

     print_r( descomponer($valor) );  // si descompone el valor pasado
?>
<center>Listado correspondiente al Jefe de Grupo <? $_SESSION['s_username']) ?> </center>
<?php
   include("conec.php");
   $link=Conectarse();
   $result=mysql_query("select * from archivo ORDER BY nombre",$link);
?>
   <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
      <TR><TD>&nbsp;<B>Nombre</B></TD> <TD>&nbsp;<B>Edad</B>&nbsp;</TD><TD>&nbsp;<B>Emergencia Avisar a:</B>&nbsp;</TD><TD>&nbsp;<B>Telefono</B>&nbsp;</TD><TD>&nbsp;<B>Clave de Grupo</B>&nbsp;</TD></TR>
                 <?php

   while($row = mysql_fetch_array($result)) {
    if ($row["STATUS"] == "ACTIVO"&($row["grupo"] == $grupo) {
      printf("<tr><td>&nbsp;%s</td> <td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td></tr>", $row["nombre"], $row["edad"], $row["emavi"], $row["telefono"], $row["rug"]);
       }
   }
   mysql_free_result($result);
   mysql_close($link);
?>
</table>
<a href="index.php">Regresar al menu principal</a>
</BODY>
</HTML>
haber si me indican errores porfa

cabe aclarar que aun no lo termino pero ya conecta a la base y hace los listados pero no con las condiciones

de antemano gracias!!

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #14 (permalink)  
Antiguo 06/11/2008, 11:01
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: necesito orientacion para programar seguridad

buenas!!

se me paso comentar que el listado funciona pero no me separa por el grupo que en si es mi problema ahorita

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:59.