Teil des Query-String auf Typ prüfen

Apache, Lighttpd, nginx, Cherokee
User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Teil des Query-String auf Typ prüfen

Post by Joe User » 2010-04-08 16:35

Moin,

ich möchte gern Teile des Query-String auf deren Typ prüfen und bei falschem Typ einen Redirect senden. Kennt Jemand von Euch ein passendes Modul für Apache 2.2? mod_rewrite kann es AFAIR leider nicht.

Beispiel:

Code: Select all

http://domain.tld/?param1=0815&param2=text

Wenn param1 nicht vom Typ Integer ist, sende Redirect http://domain2.tld/

Gruss,
Joe User
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Teil des Query-String auf Typ prüfen

Post by Joe User » 2010-04-08 16:47

Wenn mod_sec nicht so ressourcenhungrig wäre, würde ich es mir ansehen ;)
Die App soll den "falschen" Query-String gar nicht erst zu sehen bekommen, da der betroffene Server bereits mehr als voll ausgelastet ist und durch den Filter entlastet werden soll.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Teil des Query-String auf Typ prüfen

Post by Joe User » 2010-04-08 17:42

Als Notlösung werde ich das auch machen, trotzdem bleibt die Frage nach einem entsprechenden ressourcenschonendem Modul für diesen Zweck. Wäre praktisch, wenn es soetwas gäbe.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: Teil des Query-String auf Typ prüfen

Post by dotme » 2010-04-08 20:06

Joe User wrote:ich möchte gern Teile des Query-String auf deren Typ prüfen und bei falschem Typ einen Redirect senden. Kennt Jemand von Euch ein passendes Modul für Apache 2.2? mod_rewrite kann es AFAIR leider nicht.


Sowas kann man schon mit mod_rewrite machen, da es ja ein Schweizer Armeemesser ist. :-D
Ob man das dann allerdings für mehr als einen Parameter oder komplexere Tests (als auf int) machen will, sei dahingestellt.

Bei mir scheint folgendes zu funktionieren

Code: Select all

RewriteEngine on

RewriteCond %{QUERY_STRING} "(?:^|&)int=([^&]*)(?:&|$)"
RewriteCond %1 "!^[\d]*$"
RewriteRule test.html http://domain2.tld/ [R=302]


Hier wird per Rückwärtsreferenze der Wert geprüft und in der ersten RewriteRule habe ich den Parameternamen mal verankert, damit er nicht mit ähnlichen lautenden (FOOint) Parametern Probleme hat.
Last edited by dotme on 2010-04-08 20:07, edited 1 time in total.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Teil des Query-String auf Typ prüfen

Post by Joe User » 2010-04-08 20:10

Interessant, werde ich nächste Woche mal testen, danke!
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

hornox
Posts: 139
Joined: 2005-09-22 23:09

Re: Teil des Query-String auf Typ prüfen

Post by hornox » 2010-04-08 23:38

Gibt es bei der mod_rewrite Lösung keine Sicherheitslücke sobald jemand auf die Idee kommt den Parameter zwei mal zu übergeben? Also http://domain.tld/?int=0815&int=evil
Der Reguläre Ausdruck findet die Zahl, beim Skript landet der String :(
Last edited by hornox on 2010-04-08 23:39, edited 1 time in total.

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: Teil des Query-String auf Typ prüfen

Post by dotme » 2010-04-09 00:02

Hehe, guter Einwand. :twisted:
Als Sicherheitsfeature sehe ich die Lösung auch nicht. Ansonsten hängt es natürlich von der Applikation ab wie die mit wiederholten Parametern umgeht - POST-Parameter mal ganz aussen vor gelassen.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Teil des Query-String auf Typ prüfen

Post by Joe User » 2010-04-09 00:38

Die Sicherheit wird von der App bereits ausreichend sichergestellt, also jeglicher Input auf Gültigkeit geprüft. Die GETs werden allerdings erst sehr spät geprüft/verarbeitet und die App kann vorerst auch nicht umgeschrieben werden.
Es geht mir lediglich um die weitere Entlastung des Systems, da die App leider etwas ressourcenhungrig ist und nicht unnötig durch "falsche" GETs belastet werden soll.
Last edited by Joe User on 2010-04-09 00:38, edited 1 time in total.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Teil des Query-String auf Typ prüfen

Post by daemotron » 2010-04-09 12:16

Auf die Schnelle würde ich jetzt versuchen, Lighty mit mod_magnet und einem hübschen Lua-Skript als Reverse Proxy davor zu klemmen. Als Ideengeber ein paar Links:

http://www.whmcr.com/2009/06/lighttpd-m ... od_magnet/
http://nordisch.org/2007/2/4/how-to-use-cleanurl-lua
http://nordisch.org/cleanurl-v5.lua

Kurze Begründung: ich halte es nicht für so arg sinnvoll, den Apachen diese Aufgabe mit übernehmen zu lassen. OK, mit mod_rewrite hindert man ihn daran, ein PHP-Skript auszuführen, aber mod_rewrite ist nicht gerade das, was man im Allgemeinen unter "schnell und schlank" versteht... (nicht so schlimm wie mod_sec, aber immer noch... na ja.) Lighty den Request im Vorfeld verwerfen zu lassen ist vermutlich die "billigste" Lösung. Einen Haken hat die Sache aber: mod_proxy von Lighty ist qualitativ nicht auf dem höchsten Niveau. Für die meisten Webapps geht's; sobald aber HTTP Header Auth oder WebDAV ins Spiel kommen, wird's kritisch. Andere Kandidaten wie Nginx oder Pound bieten leider nicht so flexible Filtermöglichkeiten.

Eine Alternative wäre noch Varnish - mit Inline C Code kann man's da auch so richtig krachen lassen :D
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Teil des Query-String auf Typ prüfen

Post by Joe User » 2010-04-09 13:31

Es handelt sich um eine "Embedded"-Kiste mit gerade mal 128MB RAM, nur noch 230kB freiem Plattenplatz und per Policy vorgeschriebener Software, da bleibt nicht viel Spielraum für die üblichen Lösungen ;)

Immerhin werden die Apps nächstes Jahr in C reimplementiert, so dass wieder mehr Luft entsteht. Bis dahin muss mod_rewrite (wird ohnehin bereits verwendet) oder eine schlankere Alternative herhalten.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.