2009-03-04 5 views
0

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

+0

Was meinen Sie mit dem Unterschied zwischen Formular eingereicht und Benutzer eingereicht? – Ikke

Antwort

0

Hier ist der Algorithmus auf einem hohen Niveau:

  1. 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.)
  2. Ü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

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.

+0

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 –

+0

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 –

3

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.

0

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.

0

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.

Verwandte Themen