Estoy usando jQuery en una aplicación que registra los clics del usuario para realizar una acción determinada mediante el enlace .click(), y quiero que esta funcionalidad esté disponible solo mediante un mouse del usuario. Uno de mis amigos señaló hoy que es posible ejecutar $ (elemento) .click() desde un terminal de javascript en Firebug (o algo similar), y lograr la misma funcionalidad que hacer clic en el elemento, algo que me gustaría evitar. ¿Alguna idea sobre cómo hacer esto? Gracias por tu contribución.Proteger la función jQuery del acceso externo
Respuesta
Respuesta corta: No, realmente no puedes evitarlo.
Respuesta larga: Cualquier evento como un click event
está obligado a tales llamados Event handlers
. Esos manejadores son functions
que se ejecutan cuando ocurre un evento dado. Por lo tanto, si hace clic en un elemento, su navegador verifica si alguno event handlers
está vinculado a él, en caso afirmativo, fires
. De lo contrario, el navegador intentará bubble up
el evento al parent elements
, nuevamente verifica si hay algún event handlers
vinculado a ese tipo de evento ... y así sucesivamente.
jQuerys
.trigger()
método (que es lo que realmente llama si llama al .click()
por ejemplo) simplemente hace lo mismo. Llama al event handlers
que están vinculados a un elemento específico, para un evento específico.
EDITAR
Es posible que algunas formas sencillas para comprarme una clase de soft detect
un verdadero clic, por ejemplo, usted podría comprobar la propiedad toElement
dentro de un event object
. Esa propiedad no está configurada cuando triggered
. Pero, de nuevo, puede falsificarlo fácilmente con .trigger()
. Ejemplo:
$(document).ready(function() {
$('#invalid2').bind('click', function(e){
alert('click\nevent.target: ' + e.toElement.id);
console.log(e);
});
$('#invalid1').bind('click', function(){
$('#invalid2').trigger({
type: 'click',
toElement: {id: 'Fake'}
});
});
});
Ejemplo de trabajo: http://www.jsfiddle.net/v4wkv/1/
Si usted acaba de llamar $('#invalid2').trigger('click')
la propiedad toElement
no estaría allí y por lo tanto fallar. Pero como puede ver, puede agregar algo al event object
.
¿Qué estás tratando de evitar? ¿Alguien está jugando con tu script del lado del cliente? Puedes hacer cosas como ofuscar tu código pero no mucho más que eso. Pero incluso hacer esto es hacer que sea más complicado de lo que vale en mi opinión.
Si no desea que las personas que realizan ciertas cosas muevan la funcionalidad al servidor.
Siento ser portador de malas noticias.
La ofuscación parece ser una manera terrible de evitar que su usuario se meta con su propia javascript. Si alguien realmente quiere pasar por todo el trabajo de hacer que algo funcione, ¿por qué no dejarlo? – LandonSchropp
@helixed Estoy de acuerdo. Dije que no valía la pena pero es una opción. Le dije que lo moviera al servidor. – spinon
Buen punto de compañeros, pero mi preocupación no es que alguien * pueda * llamarlo ellos mismos, sino que podrían escribirlo en algo que podría ejecutarse con mucha frecuencia. Necesito que el evento solo suceda con la frecuencia con que un humano hace clic en un mouse. (y sí, se comunica con mi servidor en cada llamada.) – man1
No se puede hacer nada en contra de eso, también sería posible escribir la función completa y luego dispararla.
¿Pero por qué es esto un problema? Si alguien está cambiando algo del lado del cliente, solo lo afecta. ¿O estás tratando de verificar algunos datos? Esto DEBE hacerse siempre en el back-end, porque nunca se puede estar seguro de lo que realmente se le envía.
Puede verificar el objeto de evento (que se pasa como primer argumento al controlador) originalEvent. No se definirá si el evento es simulado por.click()
Pero es completamente inútil. No puede usar javascript para seguridad: el cliente tiene control total sobre él (y Firebug Console es la herramienta más obvia). Las comprobaciones de seguridad del lado del cliente deben ser solo una sugerencia para el usuario y protección contra errores, las entradas maliciosas pueden detenerse solo en el lado del servidor.
- 1. Acceso argumentos de la función del decorador
- 2. Proteger archivo PHP de acceso directo
- 3. Javascript ámbito externo acceso variable
- 4. acceso elemento de jQuery después de la función de agregación
- 5. ¿Cómo proteger el acceso = funciones "remotas" en CFC de fisgones?
- 6. Configuración de acceso externo a XAMPP
- 7. ¿Variable de acceso en el ámbito externo?
- 8. Función de cierre de Python que pierde el acceso variable externo
- 9. Reciba la POST del formulario externo
- 10. Jquery carga parcial de HTML externo
- 11. jquery documento listo en script externo
- 12. Cómo proteger .NET DLL's
- 13. Cómo proteger Elmah.axd?
- 14. Cómo proteger CouchDB
- 15. ¿Cómo proteger el recurso del sitio web de la descarga?
- 16. Cargar Javascript externo en la llamada de función
- 17. ¿Cómo invocar "esto" externo en la función interna?
- 18. Función del pageshow de Jquery Mobile
- 19. obtener html de url externo en jquery
- 20. Problema del navegador cruzado con la función jquery offset()
- 21. paso del ratón y la función jQuery mouseOut
- 22. jQuery $ .ajax() error de la fuente del mensaje función
- 23. jQuery no funciona en JavaScript externo
- 24. ¿Variable de acceso del alcance de otra función?
- 25. CGAffineTransformMakeRotation alrededor del punto externo
- 26. leer archivo del almacenamiento externo
- 27. carga jQuery-Plantillas desde un archivo externo?
- 28. Cómo proteger "." ¿carbonizarse?
- 29. Acceso desde el servidor de desarrollo python externo
- 30. ¿Cómo habilito el acceso externo al servidor MySQL?
Es preocupante que piense que esto podría ser posible. Deberías leer más sobre la seguridad y el proceso de explotación. (¿y te di un +1) – rook
¿Alguna lectura recomendada? ¡Gracias! – man1