www.ProFTPD.de
13. März 2007, 19:38:49 *
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: SMF - Neu installiert!
 
   Übersicht   Hilfe Suche Login Registrieren  
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: PathAllowFilter, PathDenyFilter & reguläre Ausdrücke  (Gelesen 1250 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
Wörsty
Moderator
ProFTPD
*****
Offline Offline

Beiträge: 1602


50772603
Profil anzeigen WWW E-Mail
« am: 10. Juni 2003, 12:51:15 »

Kann mir mal einer einen regulären Ausdruck basteln, der nur folgende Zeichen zulässt:
Code:
a-z A-Z 0-9 . - _

Dies und jenes hat mir nicht wirklich geholfen  :?

Beispiel:
Okay: Bob_23.doc
Nicht okay: Bob=23.doc
Gespeichert

RedHat 8.0 (2.4er Kernel)
proftpd 1.2.10
-mod_sql_mysql
-mow_wrap
-mod_exec
-mod_ifsession[/size]
Lucy
ProFTPD
*
Offline Offline

Beiträge: 28


Profil anzeigen WWW E-Mail
« Antwort #1 am: 10. Juni 2003, 15:46:15 »

ja ich versuch es mal ... denn regexp iss ne welt für sich ...
(vielleicht hilft es dir auch, wenn du dir die manpages von grep anguggst ...)

hier meine private lösung ...
Code:
PathAllowFilter "^[a-zA-Z0-9äöüÄÖÜß@ùúàáèéòó\'\´\#\`\~ _.-]+$"


ich erkläre mal kurz vielleicht hilf des dir und du kannst die was entsprechendes zusammenbasteln ...
(in meinem filter erlaube ich alle regulär zugelassene charackters, wenn windows-user ihre  ordner oder dateien benennen)

^                 (Caret) paßt auf den Zeilenanfang ( also a-zA-Z0-9)
[]                 Character klasse (ist klar)
\z.b.punkt     leitet escape-sequence ein, um steuerzeichen als  Charakter darzustellen
das heisst also z.b.
Code:
\.
wertet den punkt als reines zeichen aus, weil der punkt ansonsten folgend interpretiert wird: ein Punkt paßt auf jeden Buchstaben außer auf das Zeilenende
$     (dollar) das ende der regular expression
+     (plus)das  dem  Operator vorangehende Muster kann einmal oder öfter vorkommen

also schausst du dir meinen path allow filter an, solltest du verstehen was ich quasi zulasse ...
(achso, unter perl,php kommen (wohl änliche?) regexp zum tragen
... ist alles fast das gleiche und unter dem begriff "POSIX - Regular Expressions" solltest du viele erklärungen finden ...)

die lösung wäre also speziell in deinem fall
Code:
PathAllowFilter "^[a-zA-Z0-9 \.\-\_]+$"

...ich weiss allerdings nicht genau ob minus und unterstrich als steuerzeichen gelten, wenn nicht, tut ein backslash davor nicht not.

@wörsty bist du dir sicher das du dot-dateien zulassen möchtest? ... ich meine notwendig ja schon .... weil alle (windows)dateinamen nen punkt enthalten "singmireinlieddotmp3, ... aber wenn er am anfang kommt ... haben sie z.B. "die möglichkeit" eine nur ein beispiel! ".htaccess" zu erstellen ....

muesstest dir also noch nen filter erstellen, der dot-dateien erlaubt, halt nur am anfang darf kein punkt kommen...

wenn du magst kann ich dir mal meinen komplett filter (von Path-allow/deny bis Allow/denyfilter) hier posten

der funktioniert, habsch getestet ...
ausser einem klitzekleinen problemchen was ich gerade entdeckte und gleich mal schildern möchte ... da muss ich mir nun nämlich auch noch was ausdenken GG

also :
unter windows ist es nicht erlaubt, z.b. einen ordner zu erstellen, der ein "/" slash beinhaltet ... also hab ich den slash im filter berücksichtigt und ihn verboten.
auf meinem testrechner gehe ich also mit ws_ftp 7.5 an den server ran ...alles schick alles schön, kann schalten und walten.

auf einem anderen rechner geht das nun nicht mehr, dort ist lediglich WS_FTP 7.0 drauf.
nu kommts... ich kann nichts mehr machen - wollte nen ordner löschen, den ich regulär und unter WS_FTP 7.5 löschen kann.

7.0 sagt mir nun forbidden file name.

ARGH gell? - also was passiert ...
schickt der doofe client 7.0 anscheinend nen fullpath command an den server ....der z.b. so aussieht :
Code:
RMD /ftphome/test/testordner

alles klar? ... blöd oder? ... da sind irgendwie 3 mal slash drinne Lächelnd ...

7.5 setz vorher irgendwie noch nen:
Code:
CWD /ftphome/test
ab und macht dann abschliessend
Code:
RMD testordner

... und das funzt ...

naja und an sonen bockmist denkt man ja nicht immer gleich ...nun muss ich auch erstmal überlegen und muss mich warscheinlich entscheiden, nicht zu pingelich zu sein ...

----
vielleicht konnt ich dir helfen ... so long lucy
Gespeichert

Wer lesen kann, ist klar im Vorteil...
Wörsty
Moderator
ProFTPD
*****
Offline Offline

Beiträge: 1602


50772603
Profil anzeigen WWW E-Mail
« Antwort #2 am: 10. Juni 2003, 16:07:38 »

Stell mich immer noch zu doof as.
Wollte das nehmen:
Code:
PathAllowFilter "^[a-zA-Z0-9]+[a-zA-Z0-9\.\-\_]+$"

Was ist daran falsch?!
1. Dateinamen mit - gehen gar nicht
2. Dateinamen mit _ gehen nicht, wenn _ an der 1. Stelle - sonst okay (gut so)
3. Dateinamen mit @ gehen nicht, wenn @ an der 1. Stelle - sonst ja?! (wieso denn nur)
Ich kapier das nicht.  :cry:
Wird der Punkt nicht richtig escaped?!
Gespeichert

RedHat 8.0 (2.4er Kernel)
proftpd 1.2.10
-mod_sql_mysql
-mow_wrap
-mod_exec
-mod_ifsession[/size]
Lucy
ProFTPD
*
Offline Offline

Beiträge: 28


Profil anzeigen WWW E-Mail
« Antwort #3 am: 10. Juni 2003, 17:31:14 »

...hmmm du brauchst keine doppelten eckigen klammern ...
ist alles mehr oder minder ne wiederholung was du da dem filter verpasst ...

ich versuche ihn mal zu interpretieren ...
>> deine dateinamen dürfen mit a-z, A-Z, 0-9 beginnen (das plus dahinter bedeutet dieses muster kann beliebig oft vorkommen, also der gesamte string kann diese charakters beinhalten) ...



nochmal kurze erklärung der sonderzeichen
* Stern steht für 0 bis n Wiederholungen von dem vorhergehenden Ausdruck
+ Das Plus steht für 1 bis n Wiederholungen
. Punkt steht für ein beliebiges Character, ausser Space
? Fragenzeichen steht für 0 oder 1 Wiederholung(en)
^ steht für die Verneinung (not)
^ kann aber auch für den Anfang einer neuen Zeile stehen.(in unserem falle)
$ steht für das Ende der Regular Expression (^$ steht für eine leere Zeile)
[] In den eckigen Klammern stehen Characters
  [abc] steht für a, b oder c
  [a-d] steht für a, b, c oder d
  [a-z0-9] steht für jeden Kleinbuchstaben und alle Zahlen
  [^1-2] Alle Zahlen ausser 1 und 2
  [ab][cd] steht für ac, ad, bc, bd
| steht für oder. text1|text2 -> text1 oder text2
\ ist der Escape Character für spezielle Zeichen z.B. \$
() stehen im Zusammenhang für das Gruppieren von Texten.


dahinter machst du noch eine eckige klammer auf ... wieso?
[ich denke mal durch das "plus" trennst du die beiden Charklassen], ein punkt,ein minus und einem unterstrich kann den vorangehenden characktern ein bis beliebig oft folgen incl. a-zA-Z0-9. die 2. eckige klammer legt also den 2.char  im wort fest ... ?
so würde ich die regexp interpretieren. sehe ich das richtig?

ich weiss jetzt z.b nicht, wie ein "@" behandelt wird ... weil du es nicht angegeben hast. kann also sein das es garnicht vorkommen darf ...

man iss ja schonwieder ne weile her als ich das gemacht hab ...bin richtig verunsichert ...höhö ...
achso ... wie gesagt ich glaub du brauchst minus und unterstrich net escapen ... nich das dies deine fehler verursacht

versuch doch mal den hier
[code]PathAllowFilter "^[a-zA-Z0-9 _.-]+$"[code]

p.s. der filter gefällt mir net ...weil ma zuviel darf ... aber das ist ja dein ding ....muesste aber das treffen was du willst ....

ich stelle mal meinen kompletten rein hier.... wenn er dir gefällt übernehm ihn einfach und probier dich einfach an ihm, um zu sehen wie regexp funzt ^^

[code]PathAllowFilter "^[a-zA-Z0-9äöüÄÖÜß@ùúàáèéòó\'\´\#\`\~\/ _.-]+$"
PathDenyFilter "^[\[\?\\\<\>\:\.]"
AllowFilter "^[a-zA-Z0-9@~ \/,_.-]*$"
DenyFilter "%"[/code]

... ist nach windows zeichensatz konvention gebastelt ... wenne fehler entdeckst bitte posten ...ansonsten editiere das aus was du denkst ...

so long
Gespeichert

Wer lesen kann, ist klar im Vorteil...
Wörsty
Moderator
ProFTPD
*****
Offline Offline

Beiträge: 1602


50772603
Profil anzeigen WWW E-Mail
« Antwort #4 am: 10. Juni 2003, 20:42:24 »

Code:
PathAllowFilter "^[a-zA-Z0-9\.\-\_]+$"

Der Blöde Punkt wird nicht escaped.
Also nochmal so:
Code:
PathAllowFilter "^[a-zA-Z0-9\\.\\-\\_]+$"

Aber dann geht - nicht. :?
Ich werd hier noch irre  :evil:
Kann das nicht mal jemand bei sich testen?  :cry:
Gespeichert

RedHat 8.0 (2.4er Kernel)
proftpd 1.2.10
-mod_sql_mysql
-mow_wrap
-mod_exec
-mod_ifsession[/size]
Lucy
ProFTPD
*
Offline Offline

Beiträge: 28


Profil anzeigen WWW E-Mail
« Antwort #5 am: 12. Juni 2003, 09:34:21 »

haste du es mittlerweile hinbekommen ? ...
ich kann deins leider nimmer testen, weil der server in echtbetrieb ist, da will ich nimmer rumspielen ...
ich installier mal woanders nen neuen, dann gugg ich mir des nochmal genau an ... wenn du möchtest ...
schreib mir bitte dann nochmal genau auf was er machen soll und was nicht ...

lucyyy
Gespeichert

Wer lesen kann, ist klar im Vorteil...
Wörsty
Moderator
ProFTPD
*****
Offline Offline

Beiträge: 1602


50772603
Profil anzeigen WWW E-Mail
« Antwort #6 am: 12. Juni 2003, 10:09:44 »

Geht noch nicht.
Ich möchte alles verbieten außer:
Code:
a-z
A-Z
0-9
_ - . [ ] und Leezeichen
Gespeichert

RedHat 8.0 (2.4er Kernel)
proftpd 1.2.10
-mod_sql_mysql
-mow_wrap
-mod_exec
-mod_ifsession[/size]
Anonymous
Gast
« Antwort #7 am: 16. Dezember 2003, 10:44:17 »

Hallo,

also ich habe das gleiche Problem. Erlaubt sei sollen A-Z, a-z, 0-9, .-_ und das Leerzeichen.

Der AUsdruck ^[-a-zA-Z0-9\._]*$ funktioniert soweit, aber wie bekomme ich das Leerzeichen da rein ? Wenn ich einfach nur ein Leerzeichen in den Ausdruck einfügen also z.b. : ^[-a-zA-Z0-9 \._]*$ bekomme ich eine Fehlermeldung. Auch wenn ich ein "\" vor das Leerzeichen stelle.

Kann da jemand helfen ?
Gespeichert
webhilfe
ProFTPD
*
Offline Offline

Beiträge: 1


Profil anzeigen WWW
« Antwort #8 am: 17. Dezember 2003, 00:38:43 »

Moin moin :-)

Hab da auch so ein Problem mit den AllowFilter.

Dies steht in meiner proftpd.conf:
Code:

AllowFilter "^[a-zA-Z0-9@~ /,_.-]*$"


Was muss ich ändern, damit ich über den ftp Client auch den Befehl LIST *.pdf ausführen kann?

Ich erhalte immer die Meldung: 550 *.pdf Forbidden command Argument.

Gerne würde ich das für einen user explizit freigeben. Wer kann helfen?
Gespeichert

Michael Stender
Satansbraten77
ProFTPD
*
Offline Offline

Beiträge: 7

240210084 satansbraten@hotmail.com
Profil anzeigen
« Antwort #9 am: 20. Dezember 2003, 16:27:27 »

Zitat von: "Wörsty"
Geht noch nicht.
Ich möchte alles verbieten außer:
Code:
a-z
A-Z
0-9
_ - . [ ] und Leezeichen



also habe mal bei uns nachgeschaut/angetestet und immo funtzt es ganz gut, sprich es sind alle Zeichen von A-Z,a-z,0-9,Leerzeichen,- und _ erlaubt. Alles andere wird definitiv mit einer Fehrlermeldung (550 forbidden filename) quittiert  L&auml;chelnd

und so stehts in der .conf :

PathDenyFilter ^[\[\\\?\<\>\:\.] $
PathAllowFilter ^[A-Za-z0-9\-\_] + $



hoffe ich konnte damit weiterhelfen.


cu

satansbraten
Gespeichert
TL
ProFTPD
*
Offline Offline

Beiträge: 97


Profil anzeigen WWW E-Mail
« Antwort #10 am: 20. Dezember 2003, 18:20:52 »

Hab gerade keine Zeit, aber hier http://www.castaglia.org/proftpd/doc/contrib/regexp.html ist nen gutes Tutorial für reguläre Ausdrücke...
Gespeichert
Anonymous
Gast
« Antwort #11 am: 04. Juni 2004, 10:18:08 »

Kann mann auch den Backslash ignorieren oder ersetzen durch Slash einstellen??
Gespeichert
mig
Gast
« Antwort #12 am: 19. Februar 2005, 17:30:07 »

Hi,
das mit dem DenyFilter ist schon eine Plage.

Wie verbiete ich das Leerzeichen alleine sprich: mkd ./ //

gruss mig
Gespeichert
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS
Seite erstellt in 0.069 Sekunden mit 16 Zugriffen.