2012-08-14 25 views
5

Ich mache ein Bookmarklet, damit ein Benutzer Domain-Posts auf meinem Server mit CORS von jeder Seite kreuzen kann. Der Benutzer muss sich vor dem Posten authentifizieren und Cookies werden verwendet. Gibt es eine Möglichkeit zu verhindern, dass eine bösartige Website JavaScript-Code in ihre Webseite einbetten kann, um domänenübergreifende Posts auf meinem Server mit den Anmeldeinformationen des Benutzers zu erstellen?Verhindern CSRF während der Verwendung von CORS?

+0

Nein. Vielleicht könnten Sie stattdessen in einen 'iframe' unter der Kontrolle Ihrer Website schreiben und dann die Benutzer 'bestätigen'() 'vor dem Posten. Oder Sie könnten ein eindeutiges CSRF-Token in das Bookmarklet jedes Benutzers einbetten und dann ... Warten Sie, ich bekomme eine Idee ... – user2428118

Antwort

1

Theoretisch könnte es eine Lösung dafür geben.

  1. Betten Sie ein eindeutiges CSRF-Token in das Bookmarklet jedes Benutzers ein.
  2. Umschließen Sie den Code im Bookmarklet in einer anonymen Funktion, damit die Seite nicht darauf zugreifen kann.
  3. Betten Sie a strong hash function in Ihrem Bookmarklet ein. Dies muss vollständig innerhalb des Bookmarklet-Codes platziert werden, um sicherzustellen, dass es nicht manipuliert werden kann.
  4. In Ihrem XMLHttpRequest, Sie senden:
    1. Die Meldung
    2. Der Hash von:
      1. Die Nachricht
      2. Ihre CSRF-Token
      3. Ein einzigartiges, langes Salz
      4. A UserID
      5. Ein Zeitstempel (nur um sicherzustellen, dass die Nachricht jetzt und nicht zu einem anderen Zeitpunkt gesendet wurde)
    3. Das Salz
    4. Der Zeitstempel
    5. A userID
  5. Auf Ihrem Server validieren Sie:
    1. Dass der Zeitstempel innerhalb des zulässigen Fehlermarge ist (die wegen dem Computer eines Benutzers erforderlich ist Uhr kann aus sein)
    2. Der Hash ist korrekt
  6. Wenn alles korrekt ist, können Sie die Nachricht posten.

Es ist ein Fehler mit diesem Konzept: Wenn eine Website mit einem der von der Bookmarklet (wie Array()) verwendeten Funktionen Stampfer, die bösartige Website noch in der Lage sein kann, abzufangen, kopiert und/oder die Nachricht ändern , Benutzer-ID oder CSRF-Token.

Verwandte Themen