Frage

Ich entwickle eine Anwendung, und haben URLs im Format www.example.com/some_url/some_parameter/some_keyword. Ich weiß, durch Design, dass es eine maximale Länge ist, dass dieser URLs hat (und immer noch gültig sein). Soll ich die URL-Länge mit jeder Anforderung, um gegen Pufferüberlauf / Injection-Angriffe zu schützen, validieren? Ich glaube, dass dies eine offensichtliche ja, aber ich bin kein Sicherheitsexperte so vielleicht ich bin etwas fehlt.

War es hilfreich?

Lösung

Wenn Sie nicht, dass die Eingabe erwartet, ablehnen.

Sie sollten immer Ihre Eingaben, validieren und sicherlich etwas außerhalb des erwarteten Bereichs verwerfen. Wenn Sie bereits wissen, dass Ihre URL ist ehrlich nicht über eine bestimmte Länge sein dann es ablehnt, bevor es wird auf die Anwendung weise scheint.

Andere Tipps

Verteidigung in der Tiefe ist ein gutes Prinzip. Aber falsche Sicherheitsmaßnahmen sind ein schlechtes Prinzip. Der Unterschied hängt von vielen Details.

Wenn Sie wirklich sicher sind, dass jede URL über N ungültig ist, dann können Sie auch ablehnen. Aber wenn es wahr ist, und wenn der Rest Ihrer Eingabevalidierung korrekt ist, dann wird es später sowieso abgelehnt bekommen. Also alles, diese Prüfung tut, ist möglicherweise, vielleicht, mildern, die durch einen anderen Fehler im Code verursacht wird. Oft ist es besser, Ihre Zeit zu verbringen, darüber nachzudenken, wie diese Fehler zu vermeiden, als darüber nachzudenken, was N sein könnte.

Wenn Sie die Länge tun überprüfen, dann am besten, es ist immer noch nicht auf dieser Längenbegrenzung an anderer Stelle in Ihrem Code zu verlassen. Dadurch, dass Paare enger zusammen die verschiedenen Kontrollen, und macht es schwieriger, die Grenze in der nächsten Version zu ändern, wenn Sie die Spezifikation ändern und mehr URLs akzeptieren müssen. Zum Beispiel, wenn die Längenbegrenzung wird ein Vorwand, um URLs auf dem Stapel ohne Sorgfalt und Aufmerksamkeit zu setzen, dann kann man jemand für einen Herbst wurde Einstellung.

Wie sind Sie so sicher, dass alle URL länger als N ungültig ist? Wenn Sie sicher sein können, dann sollte es nicht schaden, es zu begrenzen, ebenso wie eine Plausibilitätsprüfung - aber lassen Sie sich nicht diese täuschen zu denken, eine Klasse von Exploit verhindert haben.

Das einzige, was ich sehen kann, dass Probleme verursachen könnte, ist, dass, während heute Ihre URL nie N überschreiten, können Sie nicht garantieren, dass das wird nicht der Fall für immer sein. Und in einem Jahr, wenn Sie zurück gehen bearbeitet, um eine URL zu ermöglichen N + y lang sein, können Sie vergessen die URL Ablehnungscode zu ändern.

Sie sind immer besser dran, die URL-Parameter zu überprüfen, bevor sie verwendet wird.

Safari, Internet Explorer und Firefox haben alle unterschiedliche max Längen, die sie akzeptiert.

ich für die kürzesten alle drei gehen wählen.

http://www.boutell.com/newfaq/misc/urllength.html

von Link Gezogen -

" Microsoft Internet Explorer (Browser) - 2.083 Zeichen

Firefox (Browser) - Nach 65.536 Zeichen, nicht die Adressleiste nicht mehr die URL in Windows Firefox 1.5.x. zeigt Allerdings wird mehr URLs arbeiten. Ich hörte auf Tests nach 100.000 Zeichen.

Safari (Browser) -. Mindestens 80.000 Zeichen funktionieren "

ich denke, das Ihnen etwas gewisses Maß an Sicherheit geben kann und möglicherweise eine wenig Bandbreite sparen, wenn die Leute Ihnen verrückt lange URLs nicht senden, aber weitgehend sollten Sie genauso gut Ihre Daten in der tatsächlichen Anwendung validieren. Mehrere Sicherheitsstufen sind in der Regel besser, aber machen Sie nicht den Fehler zu denken, dass, weil Sie haben einen (schwachen) Schutz am Anfang, dass Sie nicht Probleme mit dem Rest haben.

Ich würde sagen, nein. Es ist nur falsche Sicherheit. Programmieren Sie einfach gut und überprüfen Sie Ihre Anfragen für schlechte Sachen. Es sollte genug sein.

Außerdem ist es nicht zukunftssicher.

Ja. Wenn es zu lang ist und Sie sicher sind, dann lehnen sie so schnell wie möglich. Wenn Sie können, es ablehnen, bevor es Ihre Anwendung erreicht (zum Beispiel IISLockdown wird dies tun).

Denken Sie daran, wenn für Zeichencodierung zu berücksichtigen.

Besser als Länge überprüft, ich glaube, Sie sollten Inhalte überprüfen. Man weiß nie, wie du gehst, Ihr URL-Schema in Zukunft verwenden, aber Sie können Ihre Eingaben immer sanieren. Setzen, um eine sehr komplexe Sache sehr einfach: Vertrauen Sie nicht vom Benutzer gelieferten Daten. Verwenden Sie es nicht direkt in DB-Abfragen stellen, nicht eval () ist es, nehmen nichts für selbstverständlich halten.

Wenn Sie gültige URLs wissen nicht über seine N Bytes dann klingt es wie ein guter Weg, Cross-Site-Scripting-Versuche ohne allzu großen Aufwand schnell zu verwerfen.

Es ist besser, zu validieren, was ist in der Anfrage als URL-Länge zu validieren.

Ihre Bedürfnisse können sich in Zukunft ändern, an welcher Stelle Sie müssen die URL-Länge Validierung entfernen oder zu ändern, möglicherweise die Einführung Bugs.

Wenn es sich als bewährte Sicherheitslücke am Ende, dann können Sie sie implementieren.

Ok, nehmen wir an, eine solche N existiert. Wie OneByOne wies darauf hin, eine fehlerhafte URL, die länger als N Zeichen ist ohnehin von anderer Eingabevalidierung abgelehnt werden. Doch in meinen Augen, dies eröffnet eine ganz neue Sache bis zu denken:

diese Konstante verwenden, können Sie Ihre anderen Validierung validieren. Wenn die anderen Validierungen nicht in der Lage gewesen, eine bestimmte URL als ungültig, jedoch zu erkennen, die URL länger als N Zeichen, löst dann diese URL einen Fehler und soll (und vielleicht die gesamte Anwendung sollte heruntergefahren aufgenommen werden, da sie eine schaffen könnten ungültige URL, die kurz genug ist).

Oh meine, viele Antworten, viele gute Punkte, so verbreiten zwar heraus, so lassen Sie mich dies alles zu konsolidieren versuchen. tl; DR. imo, dies zu niedrigem Niveau ist ein Anliegen für Anwendungsschicht-Code

Ja, das könnte die URL sein von alle Länge, aber in der Praxis Browser hat eine Grenze. obwohl natürlich, dass Sie nur von Browser-basierte Angriffe durch Menschen bereit sind, sie selbst zu diesen Vektoren zu begrenzen schützt, so müssen Sie tun etwas, um die aktiven Angriffsversuche der Handhabung.

Ok, kann es vor Pufferüberläufen schützen. Nun, nur, wenn Sie auf einem niedrigen Niveau arbeiten und nicht über solche Bedenken zu denken. Die meisten Sprachen in diesen Tagen Unterstützung Saiten recht gut und werden sie nicht zulassen, dass nur Überlauf. Wenn Sie mit einigen sehr niedrigen Niveau System zu tun hatten, tatsächlich die Daten als Bytes zu lesen und sie in einen ‚string‘ Typ setzen, dann müssen, dann sollten Sie eine Möglichkeit zur Detektion haben und diese Handhabung, aber es ist nicht so schwer, Speicher zuzuweisen, und Überweisungsbeträge zu einer Zeit bekannt ist, nur zu verfolgen, wie viel Speicher setzen Sie beiseite. Ehrlich gesagt, wenn Sie mit diesem niedrigen Niveau zu tun haben, sollten Sie wirklich etwas anderes verwenden.

Na ok, was ist nur die Ablehnung basiert auf String-Länge? Der große Nachteil dabei ist das Potenzial für ein falsches Gefühl der Sicherheit. Das heißt, einige Bereiche des Codes könnte ‚schlampig‘ bekommen und zu den sehr Taten versuchen Sie zu vermeiden anfällig sein. Sie müssen klar vorsichtig sein, um sicherzustellen, dass dieses ‚globales‘ Limit tatsächlich ausreichend ist, aber Ihr URI-Format unter Berücksichtigung, können Sie diesen ‚Teile‘ Bericht zurück, was ihre maximale Länge ist und die Länge Prüfung von zentraler Bedeutung haben können, (für beide die gesamte Zeichenfolge und die Komponenten davon); zumindest auf diese Weise, wenn ein Teil einer längeren Zeichenkette ermöglichen muss, dann ist es einfacher, die Änderung zu behandeln.

Dies hat natürlich haben einige Vorteile, um es, für einen, es ist sehr schnell in der Lage sein, um die Länge eines Strings zu vergleichen und den Antrag ablehnen sofort ... aber vergessen Sie nicht, ein ‚gut erzogen‘ werden Website sollten Sie eine richtige Antwort seine Rücksendung zu erklären, warum der Server dies ablehnt. obwohl in der Praxis tun Sie wirklich, dass Sie gehen zu behandeln zu haben, dass viele dieser Arten von ‚falschen‘ URL, doch würden sie in so viele andere Möglichkeiten, falsch sein.

Aus irgendeinem Grund fühlte man sich wie nicht sagen, welche Sprache Sie verwenden. Hochsprachen wie Java oder Python haben einige sehr gute Bibliotheken für mit ‚Web-Zeug‘ zu tun. Java werden Sie Muster für den URI, einschließlich der Verwendung von Regex für dieses Muster festlegen lassen, wenn Sie also einen Namen in der URL wollen, Sie so etwas wie @Path("/person/(.{0..100}") haben könnte den Parameter auf 100 Zeichen zu begrenzen. Ich wäre überrascht, wenn die Gleichen von Ruby oder Python nicht gleichwertig hatte, wie sie sich so schön ‚Webby‘ Sprachen zu fördern.

Schließlich unabhängig von der Länge gibt es viele Dinge, die Sie bestätigen müssen, nicht nur Länge. Nachdem über die Länge der URI befürchten ein Pufferüberlauf ist ein sehr niedriges Niveau, was verursacht, und müßte sehr generisch sein, also müssen jede Anforderung zu handhaben, auch eine mit einem 1 GB URI möglicherweise; beachten Sie, ich sagte: ‚Griff‘ nicht ‚akzeptieren sie einen Pass an die Anwendungsschicht nach oben‘, sie es auf diesem niedrigen Niveau ablehnen könnte, vielleicht auch Systemereignisse ausgelöst wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top