Foros del Web » Programando para Internet » PHP »

ID aleatorio o algo para ocultar el ID del registro

Estas en el tema de ID aleatorio o algo para ocultar el ID del registro en el foro de PHP en Foros del Web. Hola, tengo un registro de clientes registrado por un usuario, es decir empleado. Donde el empleado registra sus clientes, puede borrarlos y editarlos, todo esto ...
  #1 (permalink)  
Antiguo 05/11/2018, 20:11
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 450
Antigüedad: 16 años, 1 mes
Puntos: 2
ID aleatorio o algo para ocultar el ID del registro

Hola, tengo un registro de clientes registrado por un usuario, es decir empleado. Donde el empleado registra sus clientes, puede borrarlos y editarlos, todo esto me funciona perfecto, pero tengo un problema de seguridad y es que cuando el empleado quiere editar un cliente, me sale la url: edit_customer.php?customers_id=1, ese id si el lo quiere cambiar manual desde la barra de direcciones se le va a cargar el cliente que el quiere, inclusive hasta el de los otros empleados. No quiero que pase esto, he buscado he intentado pero me carga de todas foras. Lo que quiere es que si ese id se puede poner aleatorio o allgo para que no se pueda acceder desde la url y modificarlo

QUien tiene idea de cómo hacerlo. Hasta el momento lo hago con la session pero solo me carga el id del cliente cuando el id del empleado es el mismo. <a href='edit_customer.php?customers_id=".$_SESSION['user_id']."'>
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #2 (permalink)  
Antiguo 05/11/2018, 21:17
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años, 7 meses
Puntos: 120
Respuesta: ID aleatorio o algo para ocultar el ID del registro

Bueno tienes varios, formas de solventar los problemas, desde organizacion de base de datos, verificacion por mysql, verificacion de token dinamico , token en javascript, con time,
bueno un sin fin y de combinaciones tambien.

pero el mas grande problema que tienes es que , si quieres que otros empleados no se metan con otros clientes que no les pertenesca, supongo que en algun lado tienes el CODIGO del empleado relacionado con el CLIENTE, desde ahi tienes que partir y lo mas seguro es hacerlo por la CONSULTA SQL,

seguramente tienes una consulta para editar del TIPO
Código MySQL:
Ver original
  1. UPDATE clientes SET algo=:variable WHERE ID=:el_id_del_ciente
solo le tienes que agregar a tu WHERE una condicional, como el de EMPLEADO_ID

Código MySQL:
Ver original
  1. UPDATE clientes
  2. SET algo=:variable
  3. WHERE ID=:el_id_del_ciente AND empleado_id=:id_del_empleado

con ello le estarias indicando que si el que quiere Editar el cliente no es el mismo que creo ese cliente, no PODRA editarlo

estoy suponiendo que tienes el "emplado_id" en tu tabla de clientes ya que cuando muestras la lista lista de clientes, de algun modo sabes que esos clientes pertenecen a los empleados

por siguiente, tambien puedes incluir un TOKEN en la session, y luego pasarla por URL, y luego hacer la verificacion para indicar que es legitimo la peticion

por ejemplo
pagina_A.php <-- aqui se crea el TOKEN $_SESSION["token"]=time();//=1234
pagina_B.php?token=1234 <-- aqui tienes el token por url y lo comparas por $_SESSION["token"]==$_GET['token'] ,
asi exiges que no acceda a pagina_B.php, sin antes haber ingresado por pagina_A.php

tambien puedes encriptar los ID, y desencriptarlos, existen muchas librerias y funciones que lo hacen
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 05/11/2018, 21:22
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 450
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: ID aleatorio o algo para ocultar el ID del registro

Lo tengo de esta forma porque el el Where si le pongo la session del usuario empleado solo me carga el id del cliente cuando el empleado es del mismo id y todos me cargar con dicho ID es decir, si el usuario empleado es id=1 al editar solo me carga el cliente cuyo id es 1

Código PHP:
Ver original
  1. ?php
  2.                                 include('config/conexion.php');
  3.                                     $query = "SELECT * from table_customer_user where customers_id=".$_GET["customers_id"]."";     // Esta linea hace la consulta
  4.                                     $result = mysql_query($query);
  5.  
  6.                                 while ($registro = mysql_fetch_array($result)){
  7.  
  8.                                 echo "
  9.                        
  10.                         <header>
  11.                             <span class='widget-icon'> <i class='fa fa-eye'></i> </span>
  12.                             <h2>Editar Cliente: <b>".$registro['customer_name']."</b></h2>
  13.        
  14.                         </header>
  15.                                
  16.                         <!-- widget div-->
  17.                         <div>
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #4 (permalink)  
Antiguo 05/11/2018, 21:33
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ID aleatorio o algo para ocultar el ID del registro

Te recomiendo que uses una llave foranea algo así

empleado
-nombre
-id

cliente
-id PK
-nombre
-id_empleado FK


y para deletear así

Código SQL:
Ver original
  1. DELETE FROM cliente WHERE empleado.id = cliente.id_empleado AND empleado.id='$idGetFromLogin'
  #5 (permalink)  
Antiguo 06/11/2018, 17:08
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: ID aleatorio o algo para ocultar el ID del registro

Si entendi bien, creo que su problema es solo de no exponer detalles de su base de datos al usar los ids reales en peticiones get.
Si es eso, es muy sencillo solucionarlo solo tienes que ofuscar tus ids, te dejo dos paquetes que te ayudan con esto.
https://github.com/jenssegers/optimus
https://hashids.org/
Otra opción es usar un campo adicional y usar UUID y hacer las peticiones de busqueda por es campo. Puedes usar uuid mediante esta libreria.
https://github.com/ramsey/uuid
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 06/11/2018, 20:11
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: ID aleatorio o algo para ocultar el ID del registro

Yo lo que pienso es que deberías restringir la edición de los datos solo al usuario que los creo o a un usuario master en el sistema, de esa manera no pueden editar nada asi tengan la ID pues el sistema no se los permitiría y en caso de ser despedido, un usuario master delegaría dichos registros a otro empleado y listo
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 14/11/2018, 07:53
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 18 años, 1 mes
Puntos: 32
Respuesta: ID aleatorio o algo para ocultar el ID del registro

Lo que yo hago es encriptar la id que quiero pasar por la url y cero problemas. Hasta hoy no me ha dado ningún tipo de problemas.

Código PHP:
$key_sha1="poner_un_codigo_cuialquiera_en_este_texto";
$id_cliente=1;
$id=sha1($key_sha1.$id_cliente); 
$key_sha1 es la semilla, cuanta mas compleja sea mejor, pero cuidado con los caracteres extraños, que luego se lo tienes que pasar a la base de datos.

Luego para saber a que cliente hace referencia, lo recoges mediantes $_GET en otro script:

Código PHP:
$sql="SELECT * FROM clientes WHERE SHA1(CONCAT('".$id."',id))='".$_GET['customer']."'"
__________________
Somos una serie de acontecimiento que puede venir al caso en un momento dado.

Etiquetas: funcion, registro
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 12:16.