Verwenden Sie POST, um Anforderungen zu senden, die Daten auf dem Server ändern.
Nach der HTTP-Spezifikation werden GET-Anforderungen (z. B. Parameter in der URL) abgerufen ) sollte nur für Anfragen zum Abrufen verwendet werden (daher der Name GET), aber keine Daten ändern. POST-Anforderungen (nicht sichtbare Parameter, die in der HTTP-Anforderung jedoch noch nicht verschlüsselt sind) sollten immer dann verwendet werden, wenn die Anforderung Daten erstellt / aktualisiert / ändert, die in der Datenbank gespeichert werden sollen (außer Standardprotokollen). Dies macht es für Angreifer etwas schwieriger, Fälschungen von standortübergreifenden Anforderungen durchzuführen, und es ist weniger wahrscheinlich, dass geheime Informationen versehentlich doppelt in Ihrem Webseitenverlauf / in Ihren Webserverprotokollen übermittelt oder gespeichert werden.
Ist die Pin-Variable ein Geheimnis?
Was Sie gerade tun, scheint abhängig von der Bedeutung des Pin code unsicher zu sein > Variable. Muss dies vor potenziellen Lauschern geheim gehalten werden oder könnten Leute, die den Stift abfangen, damit einen Angriff ausführen? Verwenden Sie in diesem Fall nur HTTPS (für die End-to-End-Verschlüsselung über die Transportschicht) für jede Anforderung mit diesen geheimen Daten. Der von Ihnen verwendete Basis-64-Wert schien 3000670269
zu sein (vorausgesetzt, ich musste zwei Gleichheitszeichen anhängen, um eine ordnungsgemäße b64-Codierung zu erhalten).
Was würde passieren, wenn ein Angreifer versuchen würde, andere Pins zu verwenden?
Nehmen wir an, mein pin = '300670269'
, aber um Ihr System zu testen, habe ich MzAwMDY3MDI1OQ
gesendet (für pin = '3000670259'
). Würden sie dann effektiv in ein anderes Benutzerkonto einbrechen? Wenn ja, sollten Sie zumindest eine zusätzliche POST-Variable wie Prüfsumme = SHA256 (Pin + secret_server_side_string)
verwenden, wobei secret_server_side_string
eine lange zufällige Zeichenfolge ist (z Etwas wie de10RRORX50UAUhx0dDIxJnzXKBAs68yjdWVz8QQ
- 40 zufällige obere + untere + Zahlenzeichen hat lg (62) * 40 = 238 Bit Entropie), und Ihre Anwendungen wirken nur auf den Pin, wenn Die Prüfsumme entspricht dem Stift. Ihre Anwendung sollte die Prüfsumme generieren (ohne dem Client die geheime_server_side_string mitzuteilen). Sie müssen auch darauf achten, dass Ihre Anwendung zeitlich konstante Zeichenfolgenvergleiche durchführt, wenn Sie die Prüfsumme mit dem Pin überprüfen, damit Ihre Anwendung nicht für Timing-Angriffe anfällig ist.