Sicherheit beim upload



  • wie kann am besten die sicherheit gewährleistet werden..
    es geht um bilder (psd, jpeg, png, tiff...), avis, movies, etc..
    multimedia ebend..
    hochgeladen werden dateien von allen betriebssystemen aus, auch mac!!

    fall 1
    ich parse die dateien

    if($_FILES['probe']['type'][$i] !="image/pjpeg"/*jpg + jpeg*/ and $_FILES
    ['probe']['type'][$i] !="video/avi" and $_FILES['probe']['type'][$i] !
    ="application/octet-stream" /*tiff + psd*/ and $_FILES['probe']['type'][$i] !
    ="image/bmp" and $_FILES['probe']['type'][$i] !="image/gif" and $_FILES
    ['probe']['type'][$i] !="image/pjpeg")
    

    nur:
    tiffs und psds, und einige andere sind octet-streams, genau wie binaries auch!

    damit stehe ich vor dem problem, zwar BÖSES php rausgefiltert zu haben, aber ich kriege viele dateien nicht ordentlich in den griff...

    fall 2
    ich parse nach endungen: nur dateien mit dem richtigen suffix laufen durch..

    /*suffixe for upload */
    $a_suffix = array(".jpg", ".jpeg", ".zip", ".gif", ".tif", ".avi", ".psd");
    

    unsinnig, da macs oft keine endungen haben, und macuser auch keine kennen. photoshopdateien läd man ohne endungen, zum bleistift

    fall 3
    ich parse nur nach BÖSEM php und lasse alles andere durch...

    doof, da es einiges mehr böses gibt.. 'mift'.

    fall 4
    ich packe überall ein nettes .zip ran...

    doof, weil die user es nicht verstehen würden ... sie haben nämlich in ihren ordner rechte, zu löschen, und so zeugs.. und wenn sie dann ein zip kriegen, wohlmöglich noch auf einen mac.... haben sie keine ahnung, was da los ist.

    vielleicht hat mir jemand eine entscheidungshilfe, oder einen gescheiten denkanstoss.. habe ich was übersehen?

    fall 4 scheidet aus zwecks benutzerunfreundlichkeit, ebenso kann ich keinem macnutzer zumuten, an endungen zu denken, die er wohlmöglich garnicht kennt...

    thanks



  • Fall 4 würde nur dann wegfallen wenn die User direkt zugriff auf den Rechner haben. Wenn sie jedoch nur Zugriff über Apache haben dann sehen sie im Grunde sowieso nur was PHP ihm liefert. Da kann man leicht eine Endung wieder wegschneiden



  • Unix-Tom schrieb:

    Fall 4 würde nur dann wegfallen wenn die User direkt zugriff auf den Rechner haben. Wenn sie jedoch nur Zugriff über Apache haben dann sehen sie im Grunde sowieso nur was PHP ihm liefert. Da kann man leicht eine Endung wieder wegschneiden

    fall 4 muss leider wegfallen, weil die user multimediamenschen sind, die auf unterschiedlichen betriebssystemen arbeiten, und vorallem die mac user (ohne diskriminierend sein zu wollen!) sind gewohnt, per drag und drop und click eine datei öffnen zu können.

    sie haben die möglichkeit, bilder hochzuladen, und fertige wieder runterzuholen.
    wenn dann ein .zip als suffix dranhängt, kriegen sie panik. sie sind nur jpeg, oder garnüscht gewohnt... .zip ist unbekannt. 😉

    man soll die bilder auch manchmal online starten können, ein zweiter grund, warum zip nicht funzt.

    ich vertraue nun einfach drauf: parsen nach allem, was ich kann (php, und sonstige sriptings),ansonsten... hat ja jeder ein passwort und ist bekannter user, wenn die was extremes fabrizieren... kriegen sie eins aufs dach 😉

    problem sind halt die vielen rechte. denn sie kriegen eigene ordner zum verwalten (upload, löschen, download), und ich wüßte, was ich mache, wenn ich solche rechte hätte 😃



  • Wenn du dem User seine Files mittels Webseite gibst dann geht es schon. Ich weiß ja nicht wie die User dann auf die Dateien zugreifen. Über Webseite geht es da HTML keine Dateien auslesen kann. Somit muss es wieder über PHP gehen und da kann man als Filenamen ausgeben was man will.
    Wenn der User über FTP oder ähnliches Zugriff hat dann kannst du sowieso nicht verhindern das er irgeendwas hochlädt.
    Dann musst du schauen das diese ordner duch den Apache nicht erreichbar sind und somit können auch keine PHP-Dateien ausgeführt werden.



  • Ich halte die letzte Idee auch für die beste! Das Sicherste wäre es natürlich, wenn du die Dateien in einem Verzeichnis ablegen kannst, auf das über den Apache nicht direkt zugegriffen werden kann, sonderrn immer nur über das Web-Interface - also dein PHP-Script. Dann kannst du dir sogar die Umbenennung ersparen 🙂



  • leider handelt es sich um bilder, vorrangig, die oben auch angeschaut werden sollen.. damit kann ich also nicht umbenennen, oder ich mache einen hölle aufwand:
    -welches bild wollen sie ansehen.. dann klicken sie zu der nächsten seite und da habe ich es dann wieder ent-suffixt...

    hmm, mir wäre es immernoch am liebsten, ich könnte die bilder (png, psd, jpeg..) nach datentyp parsen, mist nur, daß das mit psd nicht funzt.. die anderen gehen ja..

    aber danke für die ideen, ihr zwei, ich werde mir was überlegen 🙂



  • Evtl. könntest du auch einfach per .htacces bzw. httpd.conf die Berechtigung für dieses Verzeichnis stark einschränken, sodass z.B. keine Scripte mehr ausgeführt werden, sondern die Files immer nur unverändert zum User gesendet werden.
    Habe ich das jetzt richtig verstanden, dass die User (alle User) direkt auf die Files zugreifen können sollen und das Web-Interface nur zum Verschieben , Löschen und Upload ist?! 🕶



  • flenders schrieb:

    Habe ich das jetzt richtig verstanden, dass die User (alle User) direkt auf die Files zugreifen können sollen und das Web-Interface nur zum Verschieben , Löschen und Upload ist?! 🕶

    Das hab ich noch nicht ganz verstanden. Und warum "Dann klicken sie ... "
    Man baue eine Funktion die einfach vor der Ausgabe in HTML den Suffix löscht bzw. den Dateinamen ohne Sufix ausgibt. Bei jedem Zufriff auf einen Datzeinamen hängst du das Suffix dran. Das merkt der User ganicht da er sowieso nur HTML sieht (wenn den auch so ist)
    Also bei jedem Upload ein Suffix dran und wenn PHP das Verzeichniss lädt und in HTML ausgeben will das Suffix bei der Ausgabe löschen.



  • flenders schrieb:

    Evtl. könntest du auch einfach per .htacces bzw. httpd.conf die Berechtigung für dieses Verzeichnis stark einschränken, sodass z.B. keine Scripte mehr ausgeführt werden, sondern die Files immer nur unverändert zum User gesendet werden.
    Habe ich das jetzt richtig verstanden, dass die User (alle User) direkt auf die Files zugreifen können sollen und das Web-Interface nur zum Verschieben , Löschen und Upload ist?! 🕶

    nein nein 😉

    ist ein größeres ding, jeder hat seinen ordner, kommerziell...

    und htaccess ist logisch für jeden ordner da.. jeder kann nur in seinen rein und da rumpfuschen.
    deswegen mache ich mir erstmal nicht die größten sorgen, weil die nutzer bekannt sind, und in einen hochsicherheitstrakt kommen, und dort rumwirtschaften.

    nur falls da einer wie ich 😉 dabei wäre, wärs halt gefährlicher. solange es reine kunden sind, wäre es ja ok.

    @unix-tom
    die bilder müssen auch online angeschaut werden. also kein suffix zip oder ähnliches. sonst geht das nicht...

    aber vielen dank, ich denke, ich habe eine lösung, der auftrag ist übernächste woche in der tüte. und dann kann ich endlich mal wieder was anderes programmieren als php 🙂 *freu*


Anmelden zum Antworten