Ich verwende jQuery in einer App, die Benutzerklicks registriert, um eine bestimmte Aktion über die .click () - Bindung auszuführen, und ich möchte, dass diese Funktion nur durch einen Benutzermousedown verfügbar ist only . Einer meiner Freunde wies heute darauf hin, dass es möglich ist, $ (element) .click () von einem Javascript-Terminal in Firebug (oder ähnlichem) auszuführen und die gleiche Funktionalität wie das Klicken auf das Element zu erreichen - etwas, das ich gerne hätte verhindern. Irgendwelche Ideen, wie man das macht? Danke für Ihre Eingabe.
Kurze Antwort: Nein, Sie können es nicht wirklich verhindern.
Lange Antwort: Jedes Event wie ein click event
ist an ein solches namens Event handlers
gebunden. Diese Handler sind functions
, die ausgeführt werden, wenn ein bestimmtes Ereignis auftritt. Wenn Sie also auf ein Element klicken, prüft Ihr Browser, ob event handlers
daran gebunden ist, wenn es fires
ist. Wenn nicht, wird der Browser versuchen, bubble up
das Ereignis an die parent elements
anzupassen, überprüft erneut, ob event handlers
für diese Art von Ereignis gebunden ist .. und so fort.
jQuerys
.trigger()
Methode (was Sie tatsächlich aufrufen, wenn Sie .click()
zum Beispiel aufrufen) macht genau das Gleiche. Es ruft die event handlers
auf, die für ein bestimmtes Ereignis an ein bestimmtes Element gebunden sind.
BEARBEITEN
Es könnte einige einfache Möglichkeiten geben, dass soft detect
ein echter Klick ist, zum Beispiel könnten Sie nach der Eigenschaft toElement
innerhalb eines event object
suchen. Diese Eigenschaft ist nicht festgelegt, wenn triggered
. Aber dann kannst du das auch mit .trigger()
leicht fälschen. Beispiel:
Arbeitsbeispiel: Ссылка
Wenn Sie einfach $('#invalid2').trigger('click')
aufrufen würden, wäre die Eigenschaft toElement
nicht vorhanden und würde daher fehlschlagen. Aber wie du sehen kannst, kannst du alles in event object
hinzufügen.
Was versuchst du zu verhindern? Jemand, der sich mit Ihrem Skript auf der Clientseite herumschlägt? Sie können Dinge tun, wie Ihren Code verschleiern, aber nicht viel anderes als das. Aber selbst das zu tun macht es nur mühsamer, als es meiner Meinung nach wert ist.
Wenn Sie nicht wollen, dass Leute bestimmte Dinge tun, verschieben Sie die Funktionalität auf den Server.
Es tut mir leid, schlechte Nachrichten zu haben.
Sie können wirklich nichts dagegen tun, es wäre auch möglich, die komplette Funktion zu schreiben und dann auszulösen.
Aber warum ist das ein Problem? Wenn jemand etwas auf der Client-Seite ändert, betrifft das nur ihn. Oder versuchen Sie, einige Daten zu überprüfen? Dies MUSS immer im Backend gemacht werden, da man nie sicher sein kann, was wirklich an es gesendet wird.
Sie können das Ereignisobjekt (das als erstes Argument an den Handler übergeben wird) orginalEvent überprüfen. Es ist undefiniert, wenn das Ereignis durch .click () simuliert wird
Aber es ist völlig nutzlos. Sie können nicht Javascript für die Sicherheit verwenden - Client hat die volle Kontrolle über sie (und Firebug Konsole ist nur das offensichtlichste Werkzeug). Clientseitige Sicherheitsprüfungen sollten nur Hinweise für den Benutzer und Schutz vor Fehlern sein, böswillige Eingaben können nur auf der Serverseite gestoppt werden.
Tags und Links javascript html jquery security web-applications