Sicherheitsrisiko bei der Verwendung von jQuery Ajax

8

Das ist eine Frage, die mich schon eine ganze Weile gestört hat. Deshalb suche ich nach Meinungen und Lösungen, um die Möglichkeit, dass die App ein Sicherheitsrisiko darstellt, einzuschränken.

Ich benutze jQuery für viele Dinge, aber hauptsächlich benutze ich es für die Verarbeitung von jQuery-Dialogfenstern. Oftmals müssen Sie einen Wert aus einem Feld im Formular abrufen, diese Informationen mit einem .serialize () - Befehl verketten und an jQuery ajax übergeben, um zu PHP-Dateien für die Datenbankinteraktion zu wechseln.

>

Hier kommt meine Frage (endlich),

Ist es nicht leicht zu erraten, wie die URL für die PHP-Verarbeitung aussehen könnte?
Sie können die Quelle in einem modernen Browser öffnen und auf einen Link klicken, um die vollständige JavaScript-Datei mit dem Ajax-Aufruf anzuzeigen.

Ich könnte möglicherweise die JavaScript-Datei zur Verschleierung verkleinern, aber das ist keine Form der Sicherheit, auf die man sich verlassen kann.

Ich benutze PDP für den Datenbankzugriff mit vorbereiteten Anweisungen für SQL-Injection-Angriffe, aber wenn jemand sich die Zeit nimmt, um zu suchen, könnten sie nicht einfach eine gültige URL bilden, sie an die Datenbank senden und einfügen, was sie wollen? / p>

Ich spreche nicht von Hacking der Datenbank auf Stahl Informationen, ich spreche mehr über das Einfügen bösartiger Informationen, als ob die Daten von der Anwendung selbst hinzugefügt wurden. Denken Sie daran, etwas zu Ihrem Einkaufswagen hinzuzufügen, das $ 50 für nur $ 25 ist.

Wenn es genauso einfach ist, die Ajax-Anfrage von GET auf POST zu stellen und meine PHP-Dateien zu ändern?

Bearbeiten: Die Person ist angemeldet und ordnungsgemäß authentifiziert.

Ich frage mich nur, was andere Leute da draußen machen.

Danke!

    
Kris.Mitchell 26.04.2012, 12:28
quelle

5 Antworten

12

Sie sind ziemlich korrekt, jeder, der etwas technisch versiert ist, kann die öffentlichen Server-Endpunkte für jede Webanwendung identifizieren. Sie müssen nicht einmal den Code anschauen. Sie können einfach ihr Webkit / Firebug verwenden, um die Anfrage zu verfolgen, oder ein Programm wie Charles, das die Netzwerkaktivität überwacht.

Aus diesem Grund benötigen Sie die Authentifizierung und die Autorisierung Behandlung in Ihrem serverseitigen Code.

Authentifizierung wird normalerweise durch einen Benutzernamen und ein Passwort gehandhabt. es ist der Akt der Überprüfung eines Benutzers ist wer er ist.

Autorisierung kann von den Rollen auf dem Server gehandhabt werden und stellt sicher, dass der Benutzer das tun kann, was er versucht.

Welche dieser beiden Mechanismen vorhanden sind, selbst wenn ein Benutzer eine URL kennt, müssen sie sich dennoch "anmelden" und die Erlaubnis haben, das zu tun, was sie tun wollen.

Denken Sie darüber nach. Wenn Sie sich online Ihre Bankkontodaten ansehen, können Sie leicht die Anfragen identifizieren, die Ihre Kontoinformationen laden. Ohne diese Mechanismen, was verhindert, dass Sie einfach die Konto-ID ändern, die Sie an den Server übergeben, um die Kontoinformationen einer anderen Person abzurufen? Mit Authentifizierung / Autorisierung weiß der Server, dass er selbst dann, wenn er eine Anforderung zum Laden einiger Daten erhält, die Details des Benutzers prüfen kann, um zu sehen, ob er die Berechtigung zum Abrufen dieser Daten hat, und die Anfrage ablehnen kann.

    
hvgotcodes 26.04.2012, 12:30
quelle
7

Selbst wenn Sie von GET nach POST wechseln, ist es für alle, die daran interessiert sind, jeden Parameter, der an Ihren Server übergeben wird, zu sehen (und zu ändern), sehr einfach. Aber hier ist der Kicker: Auch wenn Sie überhaupt keine AJAX verwenden, sondern einfache alte Formen, ist immer noch sehr einfach, alle Parameter zu sehen und zu bearbeiten, die an Ihren Server übergeben werden.

In kritischen Situationen können Sie sich niemals ganz darauf verlassen, was Sie von Ihren Kunden erhalten.

Wenn Sie beispielsweise etwas zu Ihrem Warenkorb hinzufügen, übergeben Sie nur die ID des Artikels und die Menge an Ihren Server. Holen Sie keine Preisdetails von Ihrem Kunden, sondern von Ihrer Datenbank. Wenn jemand versucht, Sie zu hacken und die gesendete Artikel-ID oder Menge zu bearbeiten, ist das schlimmste, was passiert, dass sie am Ende etwas kaufen, was sie nicht wollten; ganz ihr Problem. (Aber aus den gleichen Gründen, wenn es ein begrenztes Angebot ist, müssten Sie überprüfen, dass die Menge, die Sie erhalten, nicht größer ist als das, was Sie einem Kunden zum Beispiel erlauben).

Am Ende des Tages müssen Sie also immer den Entwickler entscheiden, welche Werte der Benutzer steuern soll, und auf Ihrer Server-Seite bestätigen, dass Sie keine Anforderungen erhalten haben, die außerhalb dessen liegen, was Sie tun der Benutzer sollte in der Lage sein zu tun.

    
David Hedlund 26.04.2012 12:32
quelle
2

Sie können sich niemals auf Aktionen oder Daten verlassen, die von der Client-Seite kommen und nicht nur auf jQuery bezogen sind.

Sie müssen alle Arten von Sicherheitsbedenken auf Ihrer Serverseite behandeln. Überprüfen Sie immer die Daten, die vom Benutzer kommen (die eine ist auf der Client-Seite, um die Anzahl der Anfragen nach Leistung zu verringern und die andere ist auf der Serverseite für die tatsächliche Bestätigung).

Der Anforderungstyp (GET oder POST) spielt eigentlich keine Rolle, es kann leicht simuliert werden. Nachdem der Benutzer versucht hat, einen $ 50 Artikel für $ 25 hinzuzufügen, sollten Sie Ihre DB überprüfen und den tatsächlichen Preis des Artikels bestätigen.

    
SadullahCeran 26.04.2012 12:33
quelle
1

Sie sollten NIE Code auf diese Weise schreiben, der Preis wird vom Kunden separat übertragen, weil jeder Daten mit Preis = 0 oder 0,01 für eine beliebige Menge an Waren / Dienstleistungen oder was auch immer senden kann.

Allgemeiner: vertraue niemals Kundendaten.

    
kirilloid 26.04.2012 12:35
quelle
1

Ja, Sie benötigen serverseitige Sicherheit, um zu überprüfen, ob alle Daten an Ihren Server gesendet wurden. Zum Beispiel validieren Sie Daten in javascript / jquery:

%Vor%

Aber wenn Sie Ihre Server-Seite nicht sichern, kann ich leere Daten auf Ihrem Server sehr einfach und vermeiden Javascript, Sie müssen also die Serverseite mit einem anderen Validierungsskript sichern, zum Beispiel:

%Vor%

Irgendwann ist es Doppelarbeit, aber wir alle stehen es manchmal ....

    
Vadim Korolov 27.05.2013 04:54
quelle

Tags und Links