Wie kann man beim Verfassen einer URL illegale Zeichen vermeiden?

8

Ich schreibe eine Webanwendung, die dynamisch URLs erstellt, die auf einer Eingabe basieren und von einem Client zu einem anderen Zeitpunkt konsumiert werden. Zur Diskussion können diese URLs bestimmte Zeichen enthalten, wie einen Schrägstrich (d. H. '/') , der nicht als Teil der eigentlichen URL, sondern nur als Argument interpretiert werden sollte. Zum Beispiel:

%Vor%

Wie Sie sehen, enthält ArgumentTo / Url / GoesHere zwar Schrägstriche, diese sollten jedoch ignoriert oder ignoriert werden .

Dies mag ein schlechtes Beispiel sein, aber die Frage ist allgemeiner und trifft auf andere Sonderzeichen zu .

Wenn also Teile einer URL nur Argument s sind und nicht zum Auflösen der eigentlichen Web-Anfrage verwendet werden sollten, was ist ein guter Weg, damit umzugehen?

Aktualisierung:

Nachdem ich einige Antworten erhalten hatte, wurde mir klar, dass ich einige Stücke nicht gezeigt habe, die hoffentlich zur Klärung beitragen werden.

Ich möchte diese Sprache ziemlich agnostisch halten, da es großartig wäre, wenn der Kunde nur eine Anfrage stellen könnte. Wenn der Client beispielsweise gewusst hat, dass er ArgumentTo / Url / GoesHere übergeben möchte, wäre es großartig, wenn das in encodiert codiert werden könnte > Zeichenfolge, in der der Server sich drehen und decodieren verwenden kann.

Können wir davon ausgehen, dass ähnliche Funktionen wie HttpUtility.HtmlEncode / HtmlDecode im .NET Framework auf anderen Systemen / Plattformen verfügbar sind? Die URL muss nicht pretty sein, also ist es nicht wirklich wichtig, echte Wörter im Pfad zu haben.

Würde so etwas wie eine base64-Codierung des Arguments funktionieren?

Es scheint, dass die base64-Kodierung / Dekodierung ziemlich leicht auf jeder Plattform / Sprache verfügbar ist.

    
Scott Saad 27.10.2008, 22:40
quelle

5 Antworten

5

Sie haben nicht gesagt, welche Sprache Sie verwenden, aber PHP hat die nützliche Funktion urlencode und C # hat HttpUtility.URLEncode und Server.UrlEncode , die Teile Ihrer URL gut verschlüsseln sollen.

Falls Sie einen anderen Weg brauchen diese Seite hat eine Liste von codierten Werten. Zum Beispiel: / == %2f .

aktualisieren

Nach dem, was Sie aktualisiert haben, würde ich Voyagerfans Idee von URLRewriting verwenden, um etwas wie:

zu machen %Vor%

Und dann benutze den GET-Parser der Anwendung, um ihn herauszufiltern.

    
Ross 27.10.2008 22:46
quelle
3

Sie können Apache überschreiben verwenden, um http:// mycompany.com/PartOfUrl1/PartOfUrl2 in http:// mycompany.com/path/to/program.php umzuschreiben und dann zu übergeben in ArgumentTo/Url/GoesHere als Standard-GET-Parameter. Was der Server tatsächlich zurücksendet, ist die Antwort für http:// mycompany.com/path/to/program.php?arg=ArgumentTo/Url/GoesHere

Das Umschreiben ist eine gute Methode, um sich vor technologischen Änderungen zu schützen (so wird beispielsweise der Wechsel von PHP zu ASP Ihre URLs nicht ändern) und Ihren Benutzern gleichzeitig benutzerfreundliche URLs zur Verfügung stellen.

Aktualisieren

Wenn Sie Ihre Beispiel-URLs verwenden und aufbauend auf dem, was ich vorher gesagt habe, würde ich sagen, dass Sie diesen Code in Ihrer httpd.conf oder .htaccess verwenden:

RewriteEngine On

RewriteRule http:// mycompany.com/PartOfUrl1/PartOfUrl2/([A-Za-z0-9]) http://mycompany.com/path/to/program.php?arg=

(Entfernen Sie das Leerzeichen nach dem ersten http:// in RewriteRule , und diese Zeile muss no Zeilenumbrüche enthalten.)

Das Ändern der Pfade, der Dateinamen, der Name des Arguments usw. ist in Ordnung; Die kritischen Teile sind hier die Regex ( ([A-Za-z0-9]) ) und die .

    
dgw 27.10.2008 22:51
quelle
1

Ja, Base64-Codierung für Ihr Argument funktioniert für Sie, Sie müssen jedoch sicherstellen, dass Ihre gesamte URL unter der Größenbeschränkung Ihres Zielbrowsers liegt (2083 Zeichen für IE 4 - 7, nach dieser Seite ).

    
Erik Forbes 27.10.2008 23:28
quelle
0

Ich glaube, was Sie suchen, wenn Sie .net verwenden, ist die HttpUtility.EncodeUrl () -Methode, da sie viele Überschreibungen hat. Schau hier: Ссылка

    
codewright 27.10.2008 22:46
quelle
0

Verwenden Sie die HtmlEncode- und Decode-Methoden für das Serverobjekt. Ich glaube, das wird die meisten Zeichen entfernen, die nicht sein sollten und kümmert sich um andere Dinge wie Leerzeichen usw.

Hier ist der MSDN-Artikel: Ссылка

    
Adron 27.10.2008 22:46
quelle

Tags und Links