Filoverførselsmoduler er et af de svageste led i webapplikationer. Enhver begået fejl, selv dem, du anser for at være små, kan resultere i, at serverkontrol falder direkte i en cyberangribers hænder. Af denne grund skal softwareudviklere kende de mest almindelige fejl og nogle angrebsmetoder, der kan opstå.
Så hvad er manipulation på klientsiden? Hvordan kan du bekæmpe dette for at holde dine websteder og dine brugere sikre?
Hvad er manipulation på klientsiden?
Indgreb på klientsiden er det grundlæggende koncept for webapplikationsangreb som helhed. Kort sagt betyder det, at du ikke længere kan stole på nogen af de data, du sender til brugeren. Derudover er manipulation på klientsiden et af grundlaget for sikker applikationsudvikling. Hvis du undersøger det filoverførselsmodul, du har at gøre med, og overvejer manipulation på klientsiden, omfatter de data, du ikke kan stole på:
- Navnet på den uploadede fil.
- Indholdstypen for den uploadede fil.
Disse to elementer er hvor du har mulighed for at hvidliste som softwareudvikler. Navnedataene for den uploadede fil kan indeholde alt med manipulation på klientsiden. Med Content-Type-dataene for den uploadede fil, selvom angriberen uploader en .exe-fil, kan denne fil vises som et billede/jpeg i systemet.
Filudvidelse og hvidliste
Mens du udvikler filoverførselsmoduler, er den første ting at gøre hvidlisteprocessen for filtypenavnet. For eksempel vil en bruger uploade en fil med navnet "muo.jpeg". Du skal sikre dig, at denne filtypenavn, som brugeren vil uploade, er .jpeg. Til dette bør systemet kontrollere den uploadede fil og se, om det er en af de tilladte filtypenavne. For at forstå, hvordan du kan gøre dette, skal du undersøge følgende simple PHP-kode:
$fil_dele = stiinfo($filnavn);
kontakt($file_parts['udvidelse'])
{
sag "jpg":
pause;sag "flagermus": // Eller exe, dll, så osv.
pause;
sag "":
sagNUL: // Ingen filtypenavn
pause;
}
Du kan gøre dette med en kodeblok, der ligner den ovenfor, eller du kan bruge de klasser og funktioner, som leveres af det framework, du bruger.
Pas på ikke at oprette filtypenavne ved at parse filnavnet i henhold til prik (.)-tegnet, fordi angriberen kan omgå dette kontroltrin med et filnavn såsom "muo.jpeg.php".
Hvad er indholdstypeoplysninger?
Indholdstypeoplysninger er et stykke information, der sendes i HTTP-anmodningen for hver filupload. Internetbrowseren registrerer disse oplysninger og føjer dem til den sendte anmodning. Angriberen kan forsøge at ændre oplysningerne med manipulation på klientsiden og omgå valideringer på serversiden. På dette stadium har udviklere brug for en kontrolmekanisme til at foretage valideringer af indholdstypeoplysningerne. Dette alene vil ikke være nok; stadig, det er et vigtigt spørgsmål for udviklere at være opmærksomme på.
Lad os sige, at du koder en mekanisme til at kontrollere filtypenavnet korrekt, og du accepterer kun filer med filtypenavnet .jpeg. Ud over denne forsigtighedsmekanisme kan du tjekke indholdstypeoplysningerne lige ind sag og kun acceptere filer med image/jpeg information, et ekstra niveau af beskyttelse mod cyberangreb
SWF Flash-filer og angrebstrin
Filtypenavnet og Content-Type-data betyder intet for internetbrowsere, der understøtter plug-ins såsom Adobe Flash Player. Selvom support for den pågældende afspiller ikke længere er tilgængelig, er det stadig muligt at installere de relaterede filer på mange systemer, selvom Flash fortsat er en sikkerhedsrisiko. I et system, der ikke har taget de relevante forholdsregler, er det muligt at kalde en Flash-fil med
For at kunne handle skal udviklere kende de veje, cyberkriminelle kan tage. Sådan kan det ske:
- Den ondsindede angriber uploader en SWF (et Adobe Flash-filformat) med navnet "image.jpeg" til målwebstedet. Under uploadprocessen bekræftes det i bekræftelsen på hvidlisten, at den fil, der er uploadet af angriberen, har en .jpeg-udvidelse. Indholdstypebekræftelse omgås med manipulation på klientsiden. Forestil dig, at denne fil, uploadet af trusselsaktøren, går til "www (dot) target-site (dot) com/images/images.jpeg".
- Lad os sige, at angriberen har et websted kaldet angriber (dot) com. Angriberen kalder image.jpeg-filen, der er uploadet til målwebstedet på denne hjemmeside, ved hjælp af
- En uskyldig bruger logger på hacker (dot) com. Dette websted kalder SWF-filen frem på www (dot) target-site (dot) com/images/image.jpeg og udfører de kommandoer, der er givet til SWF'en.
- Gennem dette kan cyberangriberen oprette HTTP-anmodningshandlinger for target-site (dot) com-adressen, uden at normale brugere bemærker det. Med disse anmodninger vil angriberen bruge sessionen for den uskyldige bruger og omgå CSRF-kontrollen.
For at forstå dette angrebsscenarie mere klart, skal du overveje, at følgende kode er i HTML
stil="højde: 1px; bredde: 1px;" data="www.target-site.com/images/image.jpeg" type="applikation/x-shockwave-flash" allowscriptaccess="altid" flashvars="c=læst&u=noget"
En af de bedste løsninger er at få adgang til de filer, der er uploadet med filupload via et andet underdomæne. I det førnævnte scenarie kan du få adgang til statiske filer, ikke fra det samme domæne, men fra et andet underdomæne som følger: "http (kolon)//file.target-site (dot) com/images/image.jpeg".
En anden løsning er at tilføje Indhold-Disposition: vedhæftet fil oplysninger til HTTP-svaret, når du modtager en anmodning om adgang til de filer, du vil uploade.
Tag forholdsregler for filuploadsårbarheder
Enhver filupload, som brugere kan lave til et websted, er farligt, så dette er et af de problemer, som udviklere bør være mest opmærksomme på. Hvis angribere opdager en sådan sårbarhed, kan de åbne en shell på webstedet og nemt udnytte informationen på serveren. Det er meget vigtigt at kontrollere alle filer, der uploades af brugere, anvende hvidlistemetoder og skjule placeringen af den uploadede mappe, hvis det er muligt.
Og selvfølgelig er der mange andre yderligere trin, du skal tage for at beskytte dit websted, selvom du tager alle de anbefalede forholdsregler for at uploade filmoduler. Brug af HTTP-sikkerhedsheadere er et sådant skridt, du kan tage.