elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: Evitar "bugear" botones de envío
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: Evitar "bugear" botones de envío  (Leído 2,850 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: Evitar "bugear" botones de envío
« en: 25 Diciembre 2019, 22:58 pm »

Buenas tardes,

Hace un tiempo había publicado un tema donde preguntaba sobre como podía evitar que un usuario haga varios clicks a un botón "submit" que registre a un usuario... si va algo lento el servidor el usuario por apurado o porque tenga poca paciencia va a hacer click como 10 veces haciendo así unos 10 registros.. los "registros" no necesariamente son solamente cuando se registra un usuario ya que en este caso no va a haber problema ya que dos usuarios con el mismo correo no se pueden registrar...

A lo que voy es...

¿Como evito el "insistente" envío de un formulario?

Esto lo había solucionado perfectamente con el uso de javascript, pero todos sabemos que Seguridad + javascript = Peligro
Así que lo quiero hacer pero con PHP un lenguaje del lado del servidor...

Lo que tengo es:

Formulario:
Código
  1. <form method="post" onsubmit="return CheckSubmit();">
  2.        <input type="text" name="texto">
  3.        <button type="submit" name="enviar">enviar</button>
  4. </form>
  5.  

javascript
Código
  1. var sending_post = false;
  2.  
  3. // functions
  4. function CheckSubmit()
  5. {
  6. if(sending_post == false)
  7. {
  8. sending_post = true;
  9. // Acá se puede mostrar una ventana modal o un mensaje de "Cargando..."
  10.  
  11.         return true;
  12. }
  13. else
  14. {
  15.                 return false;
  16. }
  17. }
  18.  

La idea es pasar eso pero a PHP? ¿Como lo harían?


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #1 en: 26 Diciembre 2019, 03:12 am »

Lo único que puedes hacer es rechazar las peticiones.
Por mucho que alteres la funcionalidad del botón o la interfaz pueden mandarte 1000 peticiones simultaneas.

En estes casos puedes discernir lo que es un accidente de un ataque.
Si le quitas la funcionalidad al botón con javascript onclick="Enviar();this.onclick=null;"
el usuario solo puede enviar una petición. En la respuesta puedes volver a activar el botón si quieres desde PHP.
Si te envía más es obvio que está manipulando la funcionalidad de algun forma. Si es necesaria la sessión para esa funcionalidad se la cierras y o mandas al panel de login. Si se loggea más de X veces en menos de X tiempo, le suspendes la cuenta X tiempo.

Por ejemplo si se loggea 20 veces en 1 minuto, lo avisas o lo banneas 5 minutos o lo que sea. Si en menos de 24 horas lo repite múltiples veces le banneas la cuenta más tiempo.

Si quieres darles por culo, le pones verificación por número de teléfono en el registro de cuenta para que no registren una nueva cada vez que banneas.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #2 en: 26 Diciembre 2019, 03:59 am »

voy a ver igualmente creo que es un poco menos complicado que eso, igualmente voy a probar cualquier cosa les comento... Dejo el tema abierto para nuevas respuestas..

Por ahí me explique mal, pero es que el usuario puede darle click rapidisimo varias veces a un botón de envío y va a enviar x peticiones dependiendo la x cantidad de veces que se dio el click...
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #3 en: 26 Diciembre 2019, 07:10 am »

Por eso. Cárgate el botón en el primer click.

Tienes onsubmit, removeEventListener, preventDefault y muchos etc.

Yo suelo hacer esto:
Código
  1. <form><button type="button" onclick="getElementsByTagName('form')[0].submit();this.onclick=null;">Enviar</button></form>


Si por lo que sea se siguen colando clicks te hice esta:
Código
  1. <form><button type="button" onclick="Enviar()">Enviar</button></form>
  2.  
  3. var _boton = {};
  4. function Enviar()
  5. {
  6.   if(_boton.pulsado === undefined)
  7.   {
  8.   _boton.pulsado = 1;   document.getElementsByTagName('form')[0].submit;
  9.   }
  10. }

De todas formas se pueden craftear peticiones a mano.
« Última modificación: 26 Diciembre 2019, 07:12 am por @?0!,5^34 » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #4 en: 26 Diciembre 2019, 08:22 am »

voy a ver igualmente creo que es un poco menos complicado que eso, igualmente voy a probar cualquier cosa les comento... Dejo el tema abierto para nuevas respuestas..

Por ahí me explique mal, pero es que el usuario puede darle click rapidisimo varias veces a un botón de envío y va a enviar x peticiones dependiendo la x cantidad de veces que se dio el click...

Te complicas mucho muchísimo.

Hace tiempo publicaste que tenias un sistema antiCSRF por que no utilizas tambien ese token para prevenir esto...

En el PHP válidas que el token sea valido he inmediatamente lo inválidas, así si recibes mas veces el mismo token simplemente lo ignoras o mandas mensaje de error.

Un vez que el PHP procese la petición le mandas de respuesta un token nuevo al Javascrip y que este lo actualize.

Lo mismo esta con el sistema recaptcha de google, si válidas con google más de una vez el mismo token te va a tirar error.

Saludos!
En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #5 en: 26 Diciembre 2019, 17:42 pm »

El metodo ya lo tengo, es el que pase arriba de todo (javascript) pero lo que preguntaba era como pasar eso a PHP... veo mejor crear una variable PHP "sending_post" booleana
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #6 en: 26 Diciembre 2019, 17:46 pm »

o en el js, al hacer click, simplemente colocas el boton como disabled y un estulo que diga "enviando" esto evita los multiples click de parte del usuario en navegador sin importar que tan rapido haga click... ojo igual necesitas proteccion del backend como te dijeron los otros usuarios
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Evitar "bugear" botones de envío
« Respuesta #7 en: 27 Diciembre 2019, 17:22 pm »

o en el js, al hacer click, simplemente colocas el boton como disabled y un estulo que diga "enviando" esto evita los multiples click de parte del usuario en navegador sin importar que tan rapido haga click... ojo igual necesitas proteccion del backend como te dijeron los otros usuarios

jeje por eso la parte del cliente ya la tengo, pase el código arriba... nada más quería saber como pasar un código similar como el que tengo arriba pero usando PHP que capaz tenga que usar AJAX la verdad todavía nose...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines