[PHP] Säkerhetsluckor i denna kod?

Permalänk
Medlem

[PHP] Säkerhetsluckor i denna kod?

Hej!

Jag är nybörjare när det gäller att skriva egna lösningar i PHP, modifiera andra och kunna språket har jag inga som helst problem med.

Nu är det så att jag inte ORKAR öppna porten för filtransfers i MSN, så jag knepade ihop ett litet script där folk kan ladda upp filer till mig via webservern.

Då jag är nybörjare så är jag lite rädd för säkerhetsluckor, så om ni ser några direkt så säg till

Anyhow, här är koden:
Index.php

<?PHP // Det som står ovanför uppladdningsfönstret $tackmeddelande = "Ladda upp en fil till Viktor här:"; // // Är filen uppladdad? // if(isset($_GET['tack'])) { $tackmeddelande = "Vill du ladda upp en till fil så kör på:"; ?> <head> <script type="text/javascript" language="Javascript"> alert("Tack så mycket, Nu är filen skickad till mig"); </script> </head> <?PHP } // // Vill användaren ladda upp en fil? // if(isset($_GET['upload'])) { // Lite config bara // $mapp = "uppladdat"; $filnamn = $_FILES['fil']['name']; $forbjudna = array('.php','.php4','php3','.tpl','.inc'); // Kolla så det inte är en förbjuden filtyp $filnamn = str_replace($forbjudna, ".txt", $filnamn); $destination = $mapp."/".$filnamn; // Nu är filen uppladdad move_uploaded_file($_FILES['fil']['tmp_name'], $destination); header('Location: ?tack'); } else { ?> <form action='<? echo $_PHP['SELF'];?>?upload' method='post' enctype='multipart/form-data' /> <b><?PHP echo $tackmeddelande;?></b><br /> <input type='file' name='fil' /><br /> <input type='submit' value='Skicka fil' /> </form> <?PHP } ?>

Permalänk
Medlem

ser vettigt ut vad jag kan se. Det (vad jag vet) vanligaste säkerhetshålet med uppladdning av filer är att väldigt få kontrollerar vad det är som tas emot. Detta framförallt när det gäller bilder, typ att man kan ladda upp foton på nån site. en .jpg-fil är nödvändigtvis inte en bild, om folk vill bråka så kan de ta någon mycket oönskad fil och döpa om den till .jpg - sedan när du försöker visa filen så kan du få besvär, typ virus.

Därför kan man med hjälp av php kolla headern på filen, så att den verkligen är vad den säger sig vara. Även detta går säkert att hacka, men det blir lite knepigare. Jag vet inte själv vilka problem riktigt detta kan orsaka, men det är lika bra att vara på den säkra sidan.

Detta är däremot kanske ganska oviktigt för din privata uploadtjänst för kompisar, men om du ska göra något större sen.

Permalänk
Medlem

Men exempelvis en .jpg-fil går ju inte att starta om det nu skulle bara en exekverbar fil(Jag kör windows på webservern och min "main"-dator), så det borde väl bara gälla om man har linux?

Dom som i huvudtaget kommer använda tjänsten är tekniskt handihappade tjejkompisar till mig som ska visa ett foto (Självklart .bmp eftersom dom inte vet vad komprimering är) och dom vet inte hur man öppnar portar (Eller ens vad en port är:D)
Så till det syftet borde det väl vara säkert?

Permalänk

Annars kan du ju lägga till en simpel lösenords skyddning. Lösenordet får bara dom som ska ladda upp. :>

Visa signatur

Neun und neunsich.

Permalänk
Medlem

Det är smart Implenterar man på 2 röda

Permalänk
Medlem

geeken, om det är en virusfil, typ en exe som nån döpt om till .jpg så skulle det inte förvåna mig om din dator skulle få virus, om det nu var någon som verkligen visste vad han gjorde.

Btw, det heter impleMEnterar... Vanligt fel det där

Permalänk
Citat:

Ursprungligen inskrivet av totoo
geeken, om det är en virusfil, typ en exe som nån döpt om till .jpg så skulle det inte förvåna mig om din dator skulle få virus, om det nu var någon som verkligen visste vad han gjorde.

Btw, det heter impleMEnterar... Vanligt fel det där

Sålänge han inte exaverar den på sin dator/server så är det ju lungt... eller?

Visa signatur

Neun und neunsich.

Permalänk
Medlem

borde vara lugnt då ja (om den inte exekveras). Men å andra sidan är jag absolut ingen säkerhetsexpert, det finns många på detta forum som slår mig stort på den fronten.

Permalänk
Hedersmedlem

Skulle nog säga att det går att dölja farliga saker i en .jpg, lär ju finnas ett antal virus som är skrivna på det sättet.

Kom att tänka på en funktion i Sub7 där man kunde kasta in trojanen i vilken fil som helst (har för mig att det inte fanns någon speciell restriktion ivf) så...

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk

Såvida man inte kör med någon alpha version av microsofts bildvisare så är det jäkligt långsökt att en bildvisare skulle exekvera någon kod i en bildfil.

Visa signatur

Asus Maximus II formula, E8400 @ 3.9GHz, 4GB Dominator DDR2, Radeon HD4850.

Permalänk

Det går inte att öppna en exe-fil genom en bildfil, det är helt omöjligt. Det är däremot möjligt, eller var i tidgare versioner av internet explorer att lägga till javascript i en jpeg fil som stal cookies och liknande ifrån sajten.

Visa signatur

Ruby (on rails) är fint!

Permalänk
Medlem

Tänkte bara på det att du kollar så att det inte är en förbjuden filtyp. Generellt tycker jag att det är en sämre metod än den motsatta metoden. Dvs kolla så att filtypen är en godkänd typ.

Ska du ha en upload tjänst för bilder, kolla då om filtypen är bmp, jpg, png, gif, tif, och vad mer du vill kunna stödja. Avvisa resten.

Visa signatur

Confused by earlier errors. Bailing out...
pluggakuten.se - Din läxhjälp på internet

Permalänk
Citat:

Ursprungligen inskrivet av bongo-apan
Det går inte att öppna en exe-fil genom en bildfil, det är helt omöjligt.

http://www.microsoft.com/technet/security/Bulletin/MS04-028.m...

Om man inte uttalar sig så tvärsäkert så framstår man inte som lika okunnig när man motbevisas..

W

Permalänk
Medlem

Okej, livlig diskution här

Omvänt? Det skulle vara enkelt det med, men ibland får man zip, rar och andra störda format från andra kompisar. Det kan vara ett savegame, 3dsmax fil, exekverbara filer (Jag har ett uppdaterat NOD32 så jag borde vara hyfsat säker. Visst, det går att reloc:a på två röda och filen är dold, men det är sånna risker man får ta

Permalänk
Citat:

Ursprungligen inskrivet av WorldSpawn
http://www.microsoft.com/technet/security/Bulletin/MS04-028.m...

Om man inte uttalar sig så tvärsäkert så framstår man inte som lika okunnig när man motbevisas..

W

Oke, jag har bara skummat igenom texten och antar att dom menar att man kan exekvera ett progra som redan ligger på datorn. Eller menar dom verkligen at du kan skapa virus.exe -> virus.jpg och öppna upp den i Bildvisaren och på så sätt exekvera ett virus? Isåfall ber jag om ursäkt , puss på dig.

För jag svarade på morces inlägg:
Kom att tänka på en funktion i Sub7 där man kunde kasta in trojanen i vilken fil som helst (har för mig att det inte fanns någon speciell restriktion ivf) så...

Men ännu en gång, jag kan ha fel; Ska skriva det i fortsättningen så inga blir sura, förlåt.

EDIT: Och det var dumt att skriva att det är omöjligt för det är det väl aldrig. Med rätt kunskap så kan väl i princip inget skydda dig!

Visa signatur

Ruby (on rails) är fint!

Permalänk

Du tillåter html uppladdning vilket kan skapa XSS säkerhetshål beroende på om du har någon hemlig cookie på samma domän.
Lägger du de uppladdade filerna så att dom är tillgängliga för webservern eller ligger dom i en mapp som bara du kommer åt? (det senare är nog att föredra)

Angående diskutionen om huruvida en jpg kan innehålla virus, så har det innan funnits ett säkerhetshål som gjorda det möjligt att exekuera kod genom en jpg. Men uppdatterar man inte windows för den typen av säkerhetshål så har man en jävla massa andra kända luckor också, som dessutom är betydligt mer allvarliga. Det vill säga det är inte fel att acceptera jpg filer, det är fel att inte uppdattera windows.

Permalänk

Men folk kan väl inte exavera koden så att den påverkar servern? Den sänder ju bara filen t.ex om någon kollar på den, och då exaveras den väl i personens webläsare?

Visa signatur

Neun und neunsich.

Permalänk
Medlem

På vissa filmer jag sett lägger de helt enkelt php-kod i en gif-fil, laddar upp på en server och surfar till den, Då körs php-koden på servern och de kan göra vad de vill.

Permalänk
Medlem

Det borde gå med ett enkelt header()-fnul, men likväl måste servern vara inställd på att köra php-kod i .gif filer för att det överhuvudtaget ska fungera.. såvida ingen laddar upp en .htaccess fil och krånglar.. bäst att lägga till det som "blockerad filtyp"

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av geeken
Det borde gå med ett enkelt header()-fnul, men likväl måste servern vara inställd på att köra php-kod i .gif filer för att det överhuvudtaget ska fungera.. såvida ingen laddar upp en .htaccess fil och krånglar.. bäst att lägga till det som "blockerad filtyp"

De filmer jag sett klistrar de även in en gif-header i filen.

Annars har jag hört en historia om en situation där någon la in ett filter som tog bord alla förekomster av "php" i sitt script men det någon finurlig person gjorde var att ladda upp filen shell.phphpp vilket då blir shell.php när php raderas. Kan man göra något liknande i fallet med trådskaparens script?

Permalänk
Medlem

WAAH!

smart! det måste jag ändra
Kan man inte köra en while-loop som tar bort all förekomst av .php i filnamnet?

Fast iofs, min tar inte bort .php, den byter ut till .txt. Så då borde det bli .p.txthp?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av geeken
WAAH!

smart! det måste jag ändra
Kan man inte köra en while-loop som tar bort all förekomst av .php i filnamnet?

Fast iofs, min tar inte bort .php, den byter ut till .txt. Så då borde det bli .p.txthp?

Jo exakt. Ditt script är ju uppbyggt lite annorlunda så det var därför jag var lite tveksam till om det gick att göra på samma sätt med ditt script.