Schützen Sie die jQuery-Funktion vor Zugriff von außen

8

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.

    
man1 23.07.2010, 06:04
quelle

4 Antworten

10

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:

%Vor%

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.

    
jAndy 23.07.2010, 06:16
quelle
1

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.

    
spinon 23.07.2010 06:15
quelle
1

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.

    
enricog 23.07.2010 06:17
quelle
0

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.

    
ymv 23.07.2010 06:17
quelle