Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

dateiname abgehackt formular

hi

ich habe ein formular, womit man eine datei vom rechner auswählen kann die man dann auf den server läd

klappt auch soweit, aber wenn die datei ein sonderzeichen enthält, zb ein hochkomma ' , dann wird alles vor dem hochkomma vom namen abgeschnitten. also aus "test ' test" wird "test"

es kommt kein fehler von php, habe auch schon dinge wie addslashes probiert aber nichts hilft

ich verstehe es nicht

auch magic_quotes ist angeschaltet, aber das problem muss woanders liegen

bitte helft mir, danke :)

Hier gehts zum Orginal Eintrag "dateiname abgehackt formular" im Forum

Antworten

Ja..
den übergebenen Dateinamen zu verwenden, ist problematisch, die differenzen zwischen
den Betriebsystemen sind dafür (noch) zu groß..


2.

Gibt es dafür vielleicht ne fertige "function" die das erledigt alá "preg_match(blabla)"
Oder selber machen?
oso


3.

Zitat:
combie postete
Ja..
den übergebenen Dateinamen zu verwenden, ist problematisch, die differenzen zwischen
den Betriebsystemen sind dafür (noch) zu groß..
meine eher preg_replace :-)


4.

Nur Buchstaben (US ASCII), Zahlen und Unterstrich.... alles andere verbieten...


5.

und wie verbiete ich das?


6.

das musst du gezwungenermassen mit preg_replace machen, da du den client nicht beeinflussen kannst. zb. so:
Code:                   In Zwischenablage kopieren (nur IE)
1">




7.

hm, ich verstehe das nicht ganz, ich habe ja den namen der datei in dem $_FILES array

jetzt hole ich den namen der datei aus dem array raus

Code:                   In Zwischenablage kopieren (nur IE)
2">

soll ich jetzt die funktion so anwenden:

Code:                   In Zwischenablage kopieren (nur IE)
3">

das funktioniert nicht, der name wird immernoch abgeschnitten, ich verstehe aber die funktion auch nicht wirklich


8.

eieiei immer immer immer mit singlequotes bei arrays arbeiten:

Code:                   In Zwischenablage kopieren (nur IE)
4">

die funktion enfternt alle zeichen die anders sind als buchstaben, zahlen und underlines.


9.

es ist leider immernoch das selbe problem

hier mal der code

Code:                   In Zwischenablage kopieren (nur IE)
5">

kann es daran liegen das ich die submitfunktion von javascript benutze?


10.

Code:                   In Zwischenablage kopieren (nur IE)
6">

Was ist das denn?

----------

Was sagt denn: print_r($_FILES) ...


11.

naja nur das die seite aktualisiert wird nach dem upload


12.

In dem Header stecken 3 Fehler:
1. 1 leerzeichen fehlt
2. Komlette URL notwendig
3. Location und nicht location
siehe: http://www.php-faq.de/q/q-http-redirect.html
Und das abschließende exit fehlt da auch!!!

------------------

Was sagt denn: print_r($_FILES) ...????

-----------------


13.

Ich vermute mal, dass der Dateiname schon von PHP abgeschnitten wird (weil es ein Katastrophenname ist).

Zum header(): ein Redirect auf die eigene Domain ist sinnfrei, erst Recht der hier gezeigte. Und "refreshed" braucht da nichts zu werden - einfach Daten (HTML) ausgeben, darauf wartet der Browser.


14.

hm, ok habe den header gelöscht, brauche ich eh nicht

bei print ist es schon abgehackt, also ich habe gar keine chance durch irgendwelche funktionen was zu ändern :(

was kann ich da unternehmen gegen diesen katastrophennamen?


15.

dann musst du deinen formularcode posten, sonst kann dir niemand helfen, weil es müsste dann am feldnamen liegen.


16.

Code:                   In Zwischenablage kopieren (nur IE)
7">




17.

aucxh wenn es nicht unbedingt direkt mit dem Problem zu tun hat...
Warum verwendest du keinen Image Button??


18.

Also das script funktioniert bei mir... ich weiss nicht was du da machst...
Code:                   In Zwischenablage kopieren (nur IE)
8">




19.

Wofür soll denn das Hidden Feld gut sein??
Und ein $_SERVER['PHP_SELF'] ungefiltert ins action Attribut zu übernehmen öffnet ein Türchen für XSS Angriffe...


20.

Zitat:
Und ein $_SERVER['PHP_SELF'] ungefiltert ins action Attribut zu übernehmen öffnet ein Türchen für XSS Angriffe...
Foggy, willst du mir einen Schock versetzen....???
Meine Tests sagen eigendlich, daß $_SERVER['PHP_SELF'] NICHT manipulierbar ist...

In welchem Szenario besteht die Gefahr??


21.

@foggy: das $_SERVER['PHP_SELF'] ist von mir eingebaut worden zum test, damit da wenigstens was ist ;-) aber was für xss angriffe???


22.

http://de.wikipedia.org/wiki/Cross-Site_Scripting

Zitat:
Meine Tests sagen eigendlich, daß $_SERVER['PHP_SELF'] NICHT manipulierbar ist...
PHP_SELF ist sehr wohl manipulierbar, FeuerFuchs bietet sogar Plugins dafür ;)
http://wiki.hackerboard.de/index.php/Cross_Site_Scripting#PHP_SELF


23.

Cross-Site Scripting sagt, das "fremder" Code in Client oder Server ausgeführt werden kann... JA!
Typische Kameraden dafür sind z.B. include und eval..!!

Aber was bitteschön hat das mit $_SERVER['PHP_SELF'] zu tun......?
Wie ist dieses manipulierbar...?

*edit: lese ich mir durch...danke!*
Problem verstanden..!
$_SERVER['PHP_SELF'] enthält nicht unbedingt das, was man erwarten würde..

So bekommt der User auf seinem Client seinen JS Code zur Ausführung...
Aber das kann er doch auch noch viel bequemer haben.......


24.

naja das bild nehme ich weil sich sonst um den button immer so ein schwarzer rahmen bildet wenn man ins formular geht, und das mag ich nicht

hab dein script nochmal in ne seperate datei gepackt, aber wieder das selbe, es wird was abgeschnitten, funktionieren tut es ja ansonsten auch

das hidden feld damit prüfe ich ob ein file geuploaded wurde oder nicht, und leite anschließend die funktion ein das file zu verschieben


25.

wenn $_FILES['datei']['size'] grösser als 0 ist wurde was hochgeladen, ansonsten nicht. Das Hidden Field ist hier also relativ sinnfrei...
Abgesehen davon füllst du dieses Feld sicherlich mit JavaScript, womit dann alle User die kein JS aktiviert haben auch nix hochladen können, da offiziell ja kein Upload stattfand...

Zitat:
So bekommt der User auf seinem Client seinen JS Code zur Ausführung...
Aber das kann er doch auch noch viel bequemer haben.......
Und was wenn ich auf dein Formular verlinke mit den XSS Strings?
Tja, dann tappen deine Besucher die über meine Seite auf dein Formular gekommen sind in meine Falle ;)


26.

das ist eh nur ein privater kleiner uploadserver, also ist mir sicherheit grad nicht so wichtig, auch alle anderen fehler sind mir grad sehr egal, es funktioniert ja alles, nur was nicht geht ist das mit der abschneiderei :(


27.

Also sorry Leute, aber ihr müsst auch nicht immer alles glauben, was im Internet steht!

PHP_SELF-Manipulationen sind wirklich unkritisch. Dieser ganze Müll:

Zitat:
PHP_SELF

PHP-Entwickler nutzen aus Bequemlichkeit oft die Variable $_SERVER['PHP_SELF'] um in Formularen die aktuelle Adresse in das Form-Tag schreiben zu lassen. In nahezu jeder dynamischen Webseite werden Formulare verwendet, beispielsweise in einem Gästebuch, Board, Shopsystem oder auch nur in einem Kontaktformular. Die Verwendung von $_SERVER['PHP_SELF'] birgt jedoch eine Gefahr von XSS in sich.

Der folgende Code stellt ein typisches Beispiel dar.

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">

Nehmen wir an hierbei handelt es sich um ein Kontaktformular welches per http://host/contact.php zu erreichen ist. PHP würde nun automatisch "contact.php" in das Form-Tag schreiben. Was aber passiert, wenn man die URL manipuliert?

In diesem Beispiel wird ein simples Javascript, welches eine Alert Box aufruft, in die Seite eingeschleust. Dazu genügt es den Code an das Ende der URL zu hängen. Würde diese Seite nun über einen Link per folgender URL aufgerufen werden: http://host/contact.php/"><script>alert('XSS')</script><form=";

erzeugt PHP folgende Ausgabe:

<form action="contact.php/"><script>alert('XSS')</script><form="" method="post">

Somit würde der Scriptcode zur Ausführung kommen. Möglich wird dies, da die aktuelle Adresse des Scripts ungefiltert ausgegeben wird. Es findet nirgendwo eine Überprüfung der Validität der übergebenen Adresse statt. Durch dass neu entstandene zweite Form-Tag werden zusätzlich Code-Teile, die nun nicht mehr richtig Dargestellt werden würden, ausgeblendet. Der ahnungslose Besucher bekommt von all dem nichts mit.


Doch hier verbirgt sich noch eine weitere Gefahr. Das Umleiten eines Logins. Dadurch das hier direkt das Form Tag verändert wird, ist es sehr einfach möglich sich ein eigenes Form Tag zu erstellen. Dieses würde nach dem originalen angezeigt werden, mit der Folge, dass das originale durch den Browser ignoriert wird. Damit kann ein Angreifer, durch einen User angegebene Login-Daten, zu sich weiterleiten. Dies könnte z.B. bei Onlinebanking fatale Folgen haben.

ist absolut nichtssagend, denn: Die Manipulation erfolgt ausschließlich auf der Seite des Clients und zwar nur bei demjenigen, der die Seite selbst aufgerufen hat. Er manipuliert also seinen eigenen Browser. Wo soll da die Gefahr sein?


28.

@oimel: der letzte abschnitt hört sich für mich nicht ganz unkritisch an...?!
@phpbeginner: was für eine abschneiderei? was zum teufel machst du nur? ich kann auch dateien mit einem ' im dateinamen hochladen, ohne probleme...


29.

Die Gefahr besteht darin das ich eben auf dein Formular linken kann mit entsprechenden Parametern.
Den link ein bisschen interessant geschmückt und schon tappen Sie zu hunderten rein...
Ganz so unkritisch sehe ich das von daher nicht.


30.

Also die: Ich bin so doof und klick überall drauf Nummer? :)


31.

Zitat:
Also die: Ich bin so doof und klick überall drauf Nummer?
Ich sag ja nicht das du das machst, aber Clowns gibts genügend, ja :)


32.

wenn ich eine datei hochlade, die den exakten namen "test ' test" hat, dann wird die datei nur unter dem namen "test" gespeichert, alles vor und inklusive dem hochkomma wird abgeschnitten, das ist doch die ganze zeit schon mein einziges problem, alles andere geht wunderbar

ich weis nicht was ich noch machen soll, das ist ja schon im files array abgeschnitten ich kann also gar nix dagegen machen

ich hab das script verwendet das du auch gepostet hast und damit geht es ebenfals nicht


33.

@foggy: stimmt schon... eine gewisse lücke ist das schon... habe gerade mal getestet und man kann das ding wirklich umleiten... bsp-url:
http://localhost/test/altedatei.php/"></form><form%20enctype="multipart/form-data"%20action="/neuedatei.php
wenn man bedenkt wieviele diese bankspammails angeklickt haben... ja es gibt viele clowns die sowas anklicken und der host wird ja noch als vertrauenswürdig angezeigt... ;-)

@phpbeginner: auch eine datei mit dem namen test ' test funktioniert bei mir einwandfrei...


34.

also ich hab das jetzt auch mal ausprobiert und kann dein Problem noch viel weniger verstehen.
Wenn ich eine Datei namens test'test.pdf hochlade ist im FILES Array nur noch der Name test.pdf vorhanden.
Von daher hat dir PHP ja sogar Arbeit abgenommen...
Denn hochgeladen wurde sie, im TMP Verzeichnis ist sie, also was solls?
Jeder der ein Hochkomma im Dateinamen verwendet ist halt selber schuld, so einfach ist das...


35.

Zitat:
Foggy postete
Wenn ich eine Datei namens test'test.pdf hochlade ist im FILES Array nur noch der Name test.pdf vorhanden.
hää??? also bei mir steht immer noch test'test.pdf aber vielleicht hat das ja mit dem windows hier zutun?! ;)


36.

also ist bei dir das selbe, das ist ja schonmal beruhigend

naja die datei ist dann total verstümmelt, gut ist nicht so schlimm aber schöner wäre es sie wäre vollständig, und bei puritania geht es ja offenbar, das ist schon etwas komisch

naja wenn es keiner rausbekommen sollte, dann mache ich ebend noch ne funktion zum umbenennen rein, oder schreibe hin das solche zeichen nicht akzeptiert werden, fertig

vielleicht liegt es ja am browser, habe opera und iexplorer getestet, welchen browser hast du puritania?


37.

am browser liegts sicher nicht, hab ie6 und firefox 1.5 getestet.
wie sind deine php.ini einstellungen (phpinfo())? bei mir:
magic_quotes_gpc = off


38.

Zitat:
naja die datei ist dann total verstümmelt,
Quatsch, die Datei war vorher total verstümmelt ;)


39.

hey, bei mir war magic_quotes_gpc = on

habe es ausgemacht und jetzt geht es tatsächlich, vielen dank

Zitat:
Quatsch, die Datei war vorher total verstümmelt
nagut, ich verwende sowas auch nicht, aber es soll leute geben dietun sowas :)


40.

magic_quotes_gpc ist mal wieder eine unbrauchbare php einstellung. standardmässig leider auf on. deshalb lieber ausschalten und selbst prüfen. http://de2.php.net/manual/de/security.magicquotes.disabling.php


41.

jop, danke nochma :)

da haben wir ja alle wieder was gelernt :)


42.

Man mag darüber streiten, ob magic_quotes eine brauchbare Einstellung ist oder nicht. Aber ich kann sicherlich nicht darüber streiten, ob ein Quote in einem Dateinamen etwas zu suchen hat...

Irgendwann hilft auch keine noch so gewissenhafte Konfiguration, spätestens wenn beispielsweise ein Doppelpunkt im Namen auftaucht, oder ein '&' (Ampersand) wird (je nach Betriebssystem) das File endgültig umzubennen sein. Ich finde ja bereits Leerstellen im Namen grauenhaft.


43.

Also im Bezug auf SQL Injections find ich die Einstellung durchaus sinnvoll.
Ist ja eher vorbeugend gedacht. Als Hoster würd ich die jedenfalls nie auf off schalten...


44.

nein, diese einstellung ist zwar eine gute idee, ist jedoch schlecht implement und somit völlig unbrauchbar. für sql injections ist nun mal mysql_real_escape_string() zuständig und keine andere funktion. auch viele hoster haben diese einstellung zum glück auf off.

@rana: genau, da man niemandem befehlen kann wie er seine dateien zu benennen hat, ist man sowieso aufs umbenennen angewiesen, es sei denn man braucht den original dateinamen eh nicht...


45.

Zitat:
für sql injections ist nun mal mysql_real_escape_string()
Trotzdem maskiert magic quotes die Strings und gibt SQL Injections vorbeugend keine Chance...


46.

nein, wie du siehst funktioniert das teil bei $_FILES nicht mal richtig. Zudem müsstest du alle applikationen die mysql_real_escape_string() verwenden umschreiben und überall prüfen ob die einstellung nun aktiv ist oder nicht. denn wenn du mysql_real_escape_string() drüberlaufen lässt hast du natürlich sowas wie \\\' und ähnliches... also weg damit.


47.

Die Gefahr ist trotz alledem eingeschränkt.
Steht sogar hier:
http://de2.php.net/manual/de/security.magicquotes.why.php
Und ja, das muss natürlich geprüft werden. Da kommst du aber auch so nicht drumrum.
Seis bei nem Stripslashes oder sonstwas...

Zitat:
also weg damit.
Du glaubst nicht wirklich das ein Anfänger mysql_real_escape_string kennt, geschweige denn benutzt oder?
Fazit: her damit :)
Aber wie Rana es bereits erkannt hat, darüber lässt sich streiten ;)


48.

Zitat:
Foggy postete
Du glaubst nicht wirklich das ein Anfänger mysql_real_escape_string kennt
Tststs... öööhm... wie heisst dieses Forum noch mal genau in dem wir uns gerade befinden? Du kannst den Thread ja zu den Anfängern schieben... ;)


49.

Man kann doch nicht ernsthaft, nur um irgendwelchen Anfängern von vornherein schlechten Stil anzugewöhnen, eine Funktion einbauen, die in jeder Art von semi- und professionellen Entwicklung ausschließlich Ärger macht? Das ist doch hier keine Krabbelgruppe, wo man den Leuten Anti-Rutsch-Socken an die Füße macht ;)


50.

Auf einem Server mit weiss ich wievielen Kunden, würd ich denen genau diese Söckchen anziehen :)


51.

warum? wenn dein server einigermassen sicher konfiguriert wurde, werden solche spammer nicht weit kommen. zudem werden sie nicht dir sondern eher deinen kunden schaden. das ist auch gut, denn dann braucht der kunde einen guten php-entwickler der sicher programmiert ;) hehe


52.

Aber du weisst nicht wie deine Kunden programmieren.
Und bevor der Ganze SQL Server geknackt ist, pack ich vorher lieber nochmal die Magic Quotes rein ;)
Und mit Server-Konfiguration hat das wenig zu tun...


53.

...da spielen doch die rechte deiner benutzer sicher eine gewisse rolle? und wie soll ein aussenstehender denn einen kompletten sql-server knacken?


54.

was sollen die Rechte mit SQL Injections zu tun haben? Oder meinst du die DB Rechte der Datenbank Benutzer?
Und auch wenn nur eine Datenbank eines Kunden geknackt werden kann, wenn ich die Möglichkeit habe hier vorgängig schon zu intervenieren als Hoster, dann mach ich das eben...


55.

ja natürlich die db rechte. der sql-user soll halt keine eigenen sql-user und db's verwalten dürfen.
ich finde dieses intervenieren ist eher ein ärgernis für viele kunden...


Hier gehts zum Orginal Eintrag "dateiname abgehackt formular" im Forum
 
phpforum.de | Impressum | Handy Bundles