eingereicht Ich hatte Java-Code für Informationen für den Server gesendet und empfangen in Bytes geschrieben.Die Probleme ist, wie ich eine HTTP-Anfrage von einem HTML-Formular übermittelt unterscheiden und eine HTTP-Anfrage, die vom Benutzer gesendet wird. Wir versuchen in HTTP-Headern zu referieren, aber für die erste Anfrage ist der Referrer null. Daher ist diese Option nicht möglich. Gibt es einen anderen API/anderen Ansatz? Bitte lassen Sie mich mit einem Beispielcode kennen ... Dank, Psunterscheiden eine HTTP-Anfrage von einem HTML-Formular und eine HTTP-Anfrage von Benutzer
Antwort
Hier ist der Algorithmus auf einem hohen Niveau:
- Wenn das HTML-Formular zu erzeugen, erzeugen eine Zufallszahl/String/GUID und einbetten es in der Form als versteckte Eingabe. Speichern Sie diesen Zufallswert serverseitig (im Anwendungskontext in einer LinkedHashMap so you can set a maximum size/MRU cache, in einer Art cache solution usw.)
- Überprüfen Sie bei der Verarbeitung der Formularanforderung, ob dieses zufällige Token vorhanden ist.
- Wenn die Anforderung den Zufall Token enthält, dann
source = HTML form
- Else,
source = human
- Wenn die Anforderung den Zufall Token enthält, dann
Sie auch Cookies könnten, wenn das Original-HTML-Formular zu senden, auf dem Postbacks für ihre Anwesenheit überprüfen; Legen Sie einige Daten in das Session-Objekt, etc; Das sind alles Varianten derselben Idee.
Ich werde eine Detailansicht des Problems geben, ich hatte einen Proxy geschrieben, der alle eingehenden und ausgehenden HTTP-Anfragen von meinem PC auf einem bestimmten port.am in der Lage, alle gesendeten und empfangenen Bytes zu erhalten (wie http Watch Tool), aber ich möchte unterscheiden eine HTTP-Anfrage von einem HTML-Formular –
und eine HTTP-Anfrage vom Benutzer gesendet. Gibt es einen Weg .. Dies hat nichts mit HTML oder Servlet in einer Anwendung zu tun. Ich hatte einen Java-Proxy geschrieben und mein Proxy muss die Anfrage identifizieren, die von einem HTML-Formular und einer vom Benutzer übermittelten HTTP-Anfrage eingereicht wurde –
Ich verstehe das Problem jetzt besser. Die einfache Antwort ist nein. Die komplexere Antwort ist eine Art von, das Beste, was Sie tun können, ist eine informierte Vermutung.
Wenn die Anfrage keine Referrer-Kopfzeile (1) hat, könnte dies bedeuten, dass der Benutzer direkt zur URL ging (indem er sie in die Adressleiste eintippte oder zum Beispiel ein Lesezeichen auswählte). Das Problem hierbei ist, dass Sie diesen Header nicht unbedingt erhalten, also müssen Sie hoffen, dass sich der Browser verhält.
Als nächstes, wenn der Anforderungstyp ein POST ist und der MIME-Typ "application/x-www-form-urlencoded" oder "multipart/form-data" ist, ist dies normalerweise eine Formularübermittlung, dh ein Benutzer hat geklickt senden oder ähnlich. (2)
Es ist (normalerweise) nicht möglich für Benutzer, die einen Browser verwenden, um POST-Anfragen direkt auszustellen.
Das sind ein paar grundlegende Regeln, die Ihnen helfen sollen, eine gute Vermutung zu treffen, aber es gibt so viele Dinge auf der Seite des Browsers, die mit dieser Logik durcheinander kommen können. Ich glaube nicht, dass Sie etwas finden werden, das Ihnen hilft Du genau.
Wenn dies aus Sicherheitsgründen ist, ist dies nicht möglich. Alles, was der Browser an Sie sendet, kann auch vom Benutzer gesendet werden.
Aber unklar ist, was Sie mit dem Senden durch den Benutzer meinen.
Wie Brindy sagte. Überprüfen Sie die Methode, wenn der Post den Mime-Typ überprüft. Es ist so genau wie du es bekommen wirst. Wenn der Benutzer kein Profi ist, weiß er nicht, wie er eine Formularübermittlung fälschen soll, und die meisten Apps, die Post zum Kommunizieren verwenden, die keine Browser sind, geben einen anderen Mime-Typ an.
- 1. Eine Zeichenkette von Benutzer
- 2. eine Niederlassung von anotrher von einem anderen Benutzer erstellt erstellen
- 3. Validate eine Eingabe von Benutzer
- 4. Unterscheiden Timeout von Benutzerunterdrückung
- 5. Wie unterscheiden Sie MariaDB und MySQL von einem PHP-Skript?
- 6. Dateien von Verzeichnissen unterscheiden
- 7. Unterscheiden NTAG213 von MF0ICU2
- 8. Einem Benutzer erlauben, nur eine bestimmte Anzahl von Checkboxen auszuwählen
- 9. Gibt es eine Möglichkeit, virtuelle Drucker von physischen zu unterscheiden?
- 10. Eine einfache Möglichkeit, zwischen einem schnellen und einem langsamen Android-Gerät zu unterscheiden
- 11. Benutzer und Kennwort für eine von htpasswd erstellte Datei überprüfen
- 12. Wie kann ich eine Datei von einem Verzeichnis in Perl unterscheiden?
- 13. WSO2 Identity Server - Unterscheiden Sie die Benutzer von primären Benutzern und sekundären Benutzern
- 14. Normale Menü KeyEvent von IME-Eröffnung unterscheiden
- 15. SQL eine Abfrage von einem bestimmten Benutzer für alle Benutzer ändern
- 16. In Visual Studio, Programmieren von .NET, wie kann ich eine Dateireferenz von einer Projektreferenz unterscheiden?
- 17. Wie kann ich eine Zeichenfolge von einem Benutzer abrufen und dann dynamisch zuweisen?
- 18. Umleiten von Datenverkehr, wenn sich der Benutzer in einem bestimmten Verzeichnis befindet und eine Abfragezeichenfolge vorliegt
- 19. Gibt es eine Möglichkeit, eine GUID von einer Zufallszahl zu unterscheiden?
- 20. Wie unterscheiden Sie einen abgebrochenen von einem nachtriggerten Boost? Deadline_timer
- 21. CommandDialog von einem Benutzer beenden
- 22. Kann sich eine Berechnung von Gleitkommazahlen auf verschiedenen Prozessoren unterscheiden? (+ Passing doubles zwischen C# und C)
- 23. Rebind eine ListView von einem jQuery iframe
- 24. Subtrahiere eine Spalte von einem Pandas Datenrahmen von einem anderen
- 25. Wie bekomme ich eine Liste von Räumen, die von einem bestimmten Benutzer in xmpp verbunden sind?
- 26. Mit Linqtosql, Wie bekomme ich eine Sammlung von Benutzern basierend auf einem Array von Benutzer-IDs
- 27. unterscheiden zwischen Zahl und Buchstaben in einem Text bearbeiten
- 28. Erhalte eine Nachricht von einem anderen Prozess
- 29. Zwei Formulare Einreichung - eine von Menü und eine von Body
- 30. Aussetzen von Dateien von einem Dienst über eine Rails-Anwendung
Was meinen Sie mit dem Unterschied zwischen Formular eingereicht und Benutzer eingereicht? – Ikke