Wie um zu verhindern, hacking, wenn Benutzer ändern die html - /javascript-Variablen auf der client-Seite?
Mit einem einfachen Werkzeug wie FireBug, jeder kann sich ändern, javascript-Parameter auf der client-Seite. Wenn jemand nehmen Sie sich Zeit und studieren Sie Ihre Anwendung für eine Weile, können Sie lernen, wie man ändern JS-Parameter, was in hacking Ihre Website.
Zum Beispiel, eine einfache Benutzer können löschen von Entitäten, die Sie sehen, aber nicht verändern darf. Ich weiß, ein guter Entwickler muss prüfen, alles auf der server-Seite, aber das bedeutet mehr Aufwand, die Sie tun müssen, Prüfungen mit Daten aus einer DB, um Erstens die Anforderung überprüfen. Dies nimmt viel Zeit für jede Aktion muss jemand bestätigt haben, und können dies nur durch das abrufen der benötigten Daten aus der DB.
Was würden Sie tun, um zu minimieren hacking in diesem Fall?
Einer einfachen Art und Weise zu validieren, ist das hinzufügen weiterer parameter für jede javascript-Funktion, muss dieser parameter eine Signatur zwischen den vorherigen Parameter und einen geheimen Schlüssel.
Wie gut klingt die Lösung oben?
Unser team teamworkpm.net um unsere Arbeit zu organisieren. Ich habe gerade entdeckt, dass ich Bearbeiten jemand anderen Aufgaben ändern, indem Sie eine javascript-Funktion, die zunächst Bearbeiten meine eigenen Aufgaben).
Ich würde Kontakt zu den Entwicklern von teamworkpm.net und sagen Sie Ihnen, Sie haben eine Sicherheitslücke!
Wenn berichtet, dieses Problem zu teamworkpm.net hier ist Ihre Antwort: "... Sie können zwar ändern, die JS um eine Aufgabe zu löschen, Sie sind als Administrator angemeldet ist und somit erlaubt zu löschen, die andere Menschen Aufgaben (Menschen auf das Projekt). Wenn die person angemeldet war, nicht auf das Projekt in dem sich die task befindet, wäre es nicht gelöscht werden." Also hier Meine Frage: bist du administrator auf das Projekt, dann ist es richtig, dass Sie löschen können, andere Völker-Aufgaben!
Ich schaute auf das Armaturenbrett und ich kann Ihnen bestätigen, ich bin KEIN administrator. Jemand anderes ist der administrator und diese ist in grün markiert in der Nähe sein Profilbild (<span class="isAdmin">Administrator</span>).
"Das nimmt viel Zeit für jede Aktion muss jemand bestätigt haben, und können dies nur durch das abrufen der benötigten Daten aus der DB." Es braucht nicht zu viel Zeit und Aufwand. Autos wären schneller, wenn Sie nicht über Sicherheits-features, aber wir bauen Sie trotzdem, weil Sie sind ein notwendiger Teil des Autos.
InformationsquelleAutor Alin Vasile | 2010-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
bei jedem Funktionsaufruf an den server, im server-Seite, bevor Sie die Aktion , die Sie brauchen, um zu überprüfen, ob dieser Benutzer berechtigt ist, das zu tun diese Aktion.
Ist es notwendig, zu bauen, server-side-Berechtigungen Mechanismus, um zu verhindern, dass unerwünschte Handlungen, die Sie möglicherweise definieren möchten, Gruppen von Benutzern, die nicht auf Ebene einzelner Benutzer, es macht es einfacher.
InformationsquelleAutor Haim Evgi
Alles auf der client-Seite gefälscht ist. Wenn Sie irgendeine Art von geheimen Schlüssel + parameter Unterschrift, Ihrer Signatur-Algorithmus muss ausreichend zufällige/sichere, kann auch nicht nachgeahmt werden.
Den overhead-erstellt mit dem hinzufügen von client-Seite die Komplexität besser verbringen crafting richtigen server-side Validierungen.
InformationsquelleAutor Dan McClain
Können Sie nicht umgehen, mit der Validierung der Methoden auf der server-Seite.
Und wie verwenden Sie den geheimen Schlüssel, ohne dass der Kunde es zu sehen? Wie Sie selbst erwähnt, kann der Benutzer leicht manipulieren können, javascript -, und auch er kann alles Lesen in javascript, der geheime Schlüssel, auch!
Können Sie nicht alles verstecken, was in JavaScript, die einzige Sache, die Sie tun können, ist zu verschleiern, die Dinge in JavaScript, und hoffe, dass niemand versucht herauszufinden, was Sie versuchen zu verstecken.
was sind deine, mir zu sagen versucht? Kann der Benutzer geben Sie einfach die javascript-Konsole von firebug und er kann darum bitten, die
Settings.PaymentSecretKey
, so gibt es keine Sicherheit, Sie können nicht zu verwenden und ausblenden alle privaten Schlüssel in javascript haben außer dem Benutzer geben Sie sich jedes mal, wenn Sie wollen, um eine Anfrage zu senden, aber dafür jede Nutzung muss lernen, seine geheimen Schlüssel.Ich glaube, Sie sagten zu tun, dass geheime Schlüssel, was auf der server-Seite und lassen Sie dann die JavaScript verwenden, dass die Signatur generiert, die aus dem geheimen Schlüssel, wenn im Gespräch mit dem server.
und wie würde das funktionieren mit Parameter kommen aus einem Formular. Der beste Weg sollte eine einfache Validierung auf dem server, er bat um etwas einfaches, und die einfachste Sache ist, dass server-seitige Validierung
Ich sage nicht, dass server-seitige Validierung ist schlecht; ich bin damit einverstanden, server-seitige Validierung ist in der Regel der Weg zu gehen, und es ist das, was ich empfohlen hätte, außer, dass die Frage, die besagt, dass Sie nicht wollen, um zu überprüfen, mit der Datenbank, etc.
InformationsquelleAutor jigfox
Diesem Grund müssen Sie überprüfen alles auf dem server. Sie können nie garantieren, dass der Benutzer nicht Durcheinander über mit Sachen, die auf dem client.
Alles, sogar Ihren javascript-Quellcode für den client sichtbar und können geändert werden von Ihnen, es gibt keinen Weg, um dieses.
InformationsquelleAutor Mongus Pong
Gibt es wirklich keine Möglichkeit dies zu tun, vollständig auf client-Seite. Wenn die person hat einen gültigen auth-cookie, Sie können Handwerk, jede Art von Anfrage Sie wollen, unabhängig von der code auf der Seite aus und senden Sie es an Ihre server. Sie können Dinge tun, mit anderen, verschlüsselte cookies, die müssen zurück geschickt mit der Anfrage übereinstimmen muss, die inputs auf der Seite, aber Sie müssen noch auf aktivieren Sie das Kontrollkästchen server-Seite. Server-side-Sicherheit ist wichtig zum Schutz Ihrer Applikation vor unbefugtem Zugriff, und Sie müssen sicherstellen, server-Seite, dass jede Aktion, die durchgeführt wird, ist eine, die der Benutzer autorisiert ist, zu führen.
InformationsquelleAutor tvanfosson
Können Sie sicher nicht alles verstecken, was client-Seite, so gibt es wenig Punkt im versuchen, dies zu tun.
Wenn das, was Sie sagen, ist, dass Sie senden so etwas wie eine Benutzer-ID, und Sie möchten, um sicherzustellen, dass der zurückgegebene Wert wurde nicht unbefugt verändert, dann ist der einfachste Weg das zu tun, so wird es wahrscheinlich zum erzeugen und senden eines UUID neben ihn, und überprüfen Sie auf zurück, dass der Wert der uuid aufeinander abgestimmt, dass sich auf dem server gespeichert, für die die Benutzer-id, bevor Sie irgendeine weitere Verarbeitung. Der Raum für die uuid ' s ist so groß, können Sie Rabatt falschen trifft gar nicht auftreten.
Als um die eigentliche server-Seite der Verarbeitung Schwachstellen:- man sollte einfach immer bauen Sie in Ihre Sicherheit/Berechtigungen möglichst nahe an der Datenbank, wie Sie können, und trotzig nicht in den client. Es gibt nichts anderes in dem Szenario, das Sie die Umrisse von jedem normalen client-server-design.
InformationsquelleAutor Cruachan
Peter von Teamworkpm.net hier - ich bin einer der Haupt-Entwickler und war besorgt über diesen Bericht über ein Sicherheits-problem. Ich habe in diesem, und ich bin glücklich, dass es nicht möglich ist, um eine Aufgabe zu löschen, die Sie nicht haben sollte Zugang zu.
Erhalten Sie eine Meldung "Sie haben keine Berechtigung, um diese Aufgabe löschen".
Ich denke, es ist nur die Verwirrung, die zwischen einem Projektträger und einem Gesamt-Administrator, dass ist das problem hier :- können Sie nicht Mitglied in einem Projekt, sondern als eine Allgemeine administrator, haben Sie noch die Berechtigung zum löschen jede Aufgabe innerhalb Ihrer Teamarbeit Website. Das ist by design.
Wir nehmen Sicherheit sehr ernst und es ist alles implementiert server-Seite, denn als Jens F sagt, wir können nicht Antworten auf client-Seite Sicherheit.
Wenn Sie kommen, über alle Probleme in TeamworkPM, dass Sie möchten, zu diskutieren, möchten wir ermutigen jeden von Euch, um einfach auf den feedback-link, und Sie werden in der Regel erhalten Sie eine Antwort innerhalb von ein paar Stunden.
InformationsquelleAutor Peter Coppinger