Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Paso seguro de variables para eliminar registro !!!

Estas en el tema de Paso seguro de variables para eliminar registro !!! en el foro de PHP en Foros del Web. Buen día. Nuevamente les solicito sos valiosos aportes a mi problema, el cual explico. Tomemos como base la siguiente pantalla Mi problema es el botón ...
  #1 (permalink)  
Antiguo 29/11/2016, 15:44
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Paso seguro de variables para eliminar registro !!!

Buen día. Nuevamente les solicito sos valiosos aportes a mi problema, el cual explico.

Tomemos como base la siguiente pantalla


Mi problema es el botón eliminar, quiero eliminar de manera segura ese usuario (usemos el termino eliminar, pero lo pondré en estado activo=N)

Toda esa tabla esta en un form, form que termina con un boton que me hace un Update Masivo y que funciona bien. Pero los botones de eliminar por su parte me estan dando problemas.

Este es el codigo del form principal
Código HTML:
Ver original
  1. <table class="table table-striped table-bordered table-hover ">
  2. <form name="ver" action="update.php" method="POST">
  3.    <tr class="danger">
  4.     <th></th>
  5.     <th>NOMBRE</th>
  6.     <th>CUENTA</th>
  7.     <th>CONCEPTO</th>
  8.     <th>MONTO</th>
  9.     <th>CORREO</th>
  10.     <th>ELIMINAR</th>  
  11.     </tr>
  12.     <tr>
  13.     <td><?php echo $count; ?></td>
  14.     <td><?php echo $nombre; ?></td>
  15.     <td><?php echo $cuenta; ?></td>
  16.     <td><?php echo $concepto; ?></td>
  17.     <td><?php echo $monto; ?>"></td>
  18.     <td><?php echo $email; ?></td>
  19.         <td>
  20.                Aca esta mi problema esta es la celda de eliminar y debe mostrar un boton de eliminar como la imagen de arriba
  21.         </td>
  22.       </tr>
  23. </form>

1- Primero quise cambiar por medio de JS el action del form, por lo que en la celda de eliminar coloque el siguiente codigo, ya que en varios temas incluso de FDW vi que aunque no se puede tener un form dentro de otro form si se puede cambiar el action por medio de JS
*antes cambie el action del form contenedor: action=""


2- Luego hice una funcion un poco mas rebuscada.
*antes cambie el action del form contenedor: action=""




3- Al no obtener buen resultado queriendo usar un form dentro de otro form o cambiando el action de mi form, pase ha hacerlo con un ancla de HTML y enviar los valores por GET


En eso estoy ahorita, les explico. Los valores se pasan el problema es que como van por GET cualquiera puede modificar la URL y eliminar otro ID (cosa nada buena) entonces comence a ver posibilidades de como evitar que desde la barra de direcciones cambien el parametro, y probe con varios metodos que segun yo servian para evitar manipular el url (isset, empty) pero por mas que he buscado siempre puedo modificar los valores en la barra de direcciones y me carga como tal (porque esa es la funcion de GET


La pregunta es facil como paso los valores de este formulario sin que puedan modificarlo (si es por GET) o como los paso por medio de POST sin afectar mi formulario padre.

Otros metodos que probe, jQuery.Post, pero el problema es que al enviar por jQuery, los valores siempre regresan a mi pagina desde donde hago el post, osea no solo envio a otro archivo si no que tambien se lee desde la pagina enviada y yo quiero solo enviar al archivo php que eliminara el usuario ejemplo

Probe con cURL pero ahi si no supe que hacer, asi que vengo como siempre a ponerles mi problema a los usuarios mas diestros de los cuales tengo referencia en la web

PD: coloque imágenes del código ya que FDW no me deja poner mucho codigo, me tira captcha y cuando lo solvento me deja en blanco la pagina
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #2 (permalink)  
Antiguo 29/11/2016, 16:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Paso seguro de variables para eliminar registro !!!

Hasta donde sé, no puedes tener formularios anidados y deberías eliminar el registro por medio de un enlace; la parte de seguridad tienes que manejarla por roles y permisos de usuario.

Ejemplo para delete.php
Código PHP:
Ver original
  1. if($_SESSION['rol'] != 'admin' || $_SESSION['permiso_borrar'] != 'si') {
  2.     // Muestras un mensaje notificando al usuario que no puede borrar registros
  3. }

Por cierto, conviene agregar una confirmación en el enlace:
Código HTML:
Ver original
  1. <a href="delete.php?id=12345" onclick="return confirm('¿Estás seguro de eliminar este registro?');">Borrar</a>
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 30/11/2016, 07:42
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Paso seguro de variables para eliminar registro !!!

Triby, de verdad muchas gracias por la respuesta.

Fíjese que aun no he llegado a la parte de los permisos/roles y la validación de la sesión, y me ha llamado la atención el hecho de que GET sea tan vulnerable, y que por medio del url se pueda hacer y deshacer.

Por otro lado en muchas paginas (con fechas viejas, eso si) aseguran haber logrado cambiar el action del form con JS, cosa que seria fenomenal, pero por mas que busque no pude hacerlo funcionar, por su parte jQuery lo malo es que no se queda en el archivo destino (no se mucho de jquery) pero el envio del POST si lo hace.

Para la parte de la confirmación, claro que la pondré, pero por el momento no porque me generaría atrasos

Alguna otra idea FDW ??


EDIT: Triby, ya analice su respuesta de hacerlo por roles y permisos, el detalle es que la url siempre sera modificada por el usuario, lo explico. Si un usuario no esta autenticado ahí si (ojo esto es algo que hago siempre, validar la sesión) mi problema no seria ese, mi problema seria que un Juan Perez, sea curioso y si ve en la url "delete.php?id=2" le puede cambiar el 2 por otro numero y vuala, se voló un usuario X que ni por cerca, eso es lo que no quiero !!!!
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.

Última edición por KATHYU; 30/11/2016 a las 08:08 Razón: Dato relevante
  #4 (permalink)  
Antiguo 30/11/2016, 08:30
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Paso seguro de variables para eliminar registro !!!

Si lo mandas por POST de jQuery... al asegurarte que si haga la acción, debes actualizar el documento para que la imagen tome el cambio, o puedes actualizar el img del cuadro... si no, estaras enviando y la acción se ejecutara pero no veras resultado en el listado, debes actualizarlo
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #5 (permalink)  
Antiguo 30/11/2016, 08:47
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paso seguro de variables para eliminar registro !!!

¿Y si aplicas un captcha para ese usuario mal intensionado?
  #6 (permalink)  
Antiguo 30/11/2016, 09:25
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Paso seguro de variables para eliminar registro !!!

A veces, uno entra en visión de túnel, y necesita otros ojos para una luz.

Gracias, me ayudaron a solventarlo, y que es lo que hice?? Fácil, separe las cosas, deje el mantenimiento de eliminar aparte y en la celda de eliminar por cada registro cree un form que pos POST me envía en id correcto

Muy agradecidos todos los consejos que me dieron.
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #7 (permalink)  
Antiguo 30/11/2016, 12:29
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Paso seguro de variables para eliminar registro !!!

Las vulnerabilidades de una web no es por usar GET o POST, sino por la falta de validación del lado del servidor. Imagina que un usuario malintencionado analiza tu código y se da cuenta cómo funciona lo de eliminar; fácilmente puede crear un formulario para ir borrando lo que le plazca.

Recuerda, todo lo que se hace en el navegador se puede modificar, ya sea que lo hagas con html o javascript; es por eso que debes realizar TODAS LAS VALIDACIONES en el servidor.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 30/11/2016, 12:48
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paso seguro de variables para eliminar registro !!!

Me sumo a triby, get y post son vulnerables por igual, solo que get es más fácil para el usuario, ya que es más gráfico.

Como comentaba triby antes, a la hora de eliminación de registros es importante los permisos.
  #9 (permalink)  
Antiguo 01/12/2016, 09:18
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Paso seguro de variables para eliminar registro !!!

A parte de todo lo comentado.

Cita:
La pregunta es facil como paso los valores de este formulario sin que puedan modificarlo (si es por GET) o como los paso por medio de POST sin afectar mi formulario padre.
Básicamente, no puedes evitarlo.

Como bien comentaba Triby
Cita:
Recuerda, todo lo que se hace en el navegador se puede modificar, ya sea que lo hagas con html o javascript; es por eso que debes realizar TODAS LAS VALIDACIONES en el servidor.
La idea para solucionar el problema pasa por validar si el usuario tiene o no permisos para realizar tal acción.
No necesariamente es necesario crear un sistema de permisos, aún que recomendable, si solo quieres que un usuario pueda borrar los registros relacionados con él mismo, puedes almacenar en sesión su id, para posterior mente realizar la validación cuando se intente realizar alguna acción. Por ejemplo al realizar un DELETE añadir en el WHERE una comparación con el id, para que sólo pueda eliminar sus registros o a la hora de filtrar datos ya tienes disponible el id del usuario logueado.

Espero haberme explicado. Un saludo.
__________________
Unset($vida['malRollo']);
  #10 (permalink)  
Antiguo 01/12/2016, 10:28
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Paso seguro de variables para eliminar registro !!!

Claro les comprendo, pero aun no llego a esa parte, generalmente mi forma de trabajar es así:

1- Desarrollo el sistema de tal forma que haga lo que debe hacer.
2- Comienzo con el login y las variables de sesión.
3- Hago las validaciones de seguridad necesarias, si el usuario tiene o no permiso de X o Y acción o de X o Y pantalla del sistema.

No se si sea la mejor manera pero funciona, y nunca he tenido problemas de seguridad y todas las validaciones de seguridad las realizo del lado del servidor.


Cita:
Iniciado por Triby Ver Mensaje
Las vulnerabilidades de una web no es por usar GET o POST, sino por la falta de validación del lado del servidor. Imagina que un usuario malintencionado analiza tu código y se da cuenta cómo funciona lo de eliminar; fácilmente puede crear un formulario para ir borrando lo que le plazca.

Recuerda, todo lo que se hace en el navegador se puede modificar, ya sea que lo hagas con html o javascript; es por eso que debes realizar TODAS LAS VALIDACIONES en el servidor.
Triby, agradecería que con "palabras normales" (para que no pongan un amplio articulo de un sitio web) me explique como es que alguien puede ver/analizar mi código php desde fuera de mi servidor, si hasta donde se, el código php nunca se muestra del lado del cliente??

Porque pueden ver que un botón o un link lleva a un archivo delete.php pero aunque lleguen a esa ruta nunca verían el código, es mas mis archivos del tipo CRUD si no hay un $_POST redirige a una pantalla de error, voy bien o no ??
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #11 (permalink)  
Antiguo 01/12/2016, 13:53
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Paso seguro de variables para eliminar registro !!!

Lamento la confusión, lo que un usuario malintencionado tiene para trabajar es lo que ve en el navegador (html y javascript) y basta una extensión como Firebug para modificar el comportamiento para crearse su propio formulario tipo:

Código html:
Ver original
  1. <form method="post" action="delete.php">
  2. <input type="text" name="id" value="" />
  3. <input type="submit" value="Borrar" />
  4. </form>

Como puedes ver, desde ahí podrá borrar lo que quiera usando POST, al igual que lo haría con GET, cambiando un número en la url y el nivel de conocimientos para esta tarea es muy básico.

Por eso la insistencia en realizar las validaciones en PHP.

En cuanto a tu forma de trabajo, creo que comienzas al revés y te sugiero crear una clase para login/variables de sesión y permisos que puedas integrar en cualquiera de tus proyectos, con la posible ventaja de incrementar tu productividad.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 02/12/2016, 13:12
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Paso seguro de variables para eliminar registro !!!

Tomare muy en cuenta sus observaciones Triby.

El código del login y sesiones ya lo tengo listo de mis proyectos anteriores, solo de implementar
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.

Etiquetas: formulario, html, paso, registro, seguro, tabla, usuario, variables
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 21:05.