KoderKoder.ai
PriserFöretagUtbildningFör investerare
Logga inKom igång

Produkt

PriserFöretagFör investerare

Resurser

Kontakta ossSupportUtbildningBlogg

Juridik

IntegritetspolicyAnvändarvillkorSäkerhetPolicy för godtagbar användningRapportera missbruk

Socialt

LinkedInTwitter
Koder.ai
Språk

© 2026 Koder.ai. Alla rättigheter förbehållna.

Hem›Blogg›Säkra filuppladdningar: behörigheter, gränser, signerade URL:er, skanningar
24 nov. 2025·7 min

Säkra filuppladdningar: behörigheter, gränser, signerade URL:er, skanningar

Säkra filuppladdningar i webbappar kräver strikta behörigheter, filstorleksgränser, kortlivade signerade URL:er och enkla mönster för skanning för att undvika incidenter.

Säkra filuppladdningar: behörigheter, gränser, signerade URL:er, skanningar

Varför filuppladdningar är riskfyllda (på enkelt språk)

Filuppladdningar verkar ofarliga: en profilbild, en PDF, ett kalkylblad. Men de är ofta den första säkerhetsincidenten eftersom de låter främlingar skicka ett paket till ditt system. Om du accepterar det, sparar det och visar det för andra har du skapat en ny attackvektor mot din app.

Risken är inte bara “någon laddar upp ett virus.” En farlig uppladdning kan läcka privata filer, spränga din lagringskostnad eller lura användare att ge bort åtkomst. En fil som heter invoice.pdf är inte nödvändigtvis en PDF. Även riktiga PDF:er och bilder kan ställa till problem om din app litar på metadata, förhandsgranskar innehåll automatiskt eller serverar det med fel regler.

Verkliga fel ser ofta ut så här:

  • Någon gissar en fil-URL och laddar ner en annan användares dokument.
  • En uppladdad HTML-fil serveras som en webbsida och visar en inloggningsfångst.
  • En angripare laddar upp enorma filer upprepade gånger tills appen blir långsam eller kraschar.
  • En ”säkert” filformat förfalskas och öppnas av personal på en intern maskin.

En detalj driver många incidenter: att lagra filer är inte samma sak som att servera dem. Lagring är där du håller bytes. Servering är hur de levereras till webbläsare och appar. Problem uppstår när en app serverar användaruppladdningar med samma förtroendenivå och regler som huvudwebbplatsen, så att webbläsaren antar att uppladdningen är ”betrodd”.

”Tillräckligt säkert” för en liten eller växande app brukar betyda att du kan svara på fyra frågor utan svävande: vem kan ladda upp, vad du accepterar, hur stort och hur ofta, och vem som kan läsa det senare. Även om du bygger snabbt (med genererad kod eller en chattdriven plattform) så är de här skydden viktiga.

En enkel hotmodell för uppladdningar

Behandla varje uppladdning som osäker indata. Det praktiska sättet att hålla uppladdningar säkra är att föreställa sig vem som kan missbruka dem och vad ”framgång” innebär för dem.

De flesta angripare är antingen bots som skannar efter svaga uppladdningsformulär eller riktiga användare som pressar gränser för att få fri lagring, skrapa data eller troligen för att trakassera. Ibland är det också en konkurrent som sonderar efter läckor eller avbrott.

Vad vill de uppnå? Vanligtvis något av följande:

  • Köra kod på dina servrar genom att ladda upp något som exekveras.
  • Stjäla privata filer genom att gissa, återanvända eller dela nedladdnings-URL:er.
  • Skada tillgänglighet genom att flöda uppladdningar eller tvinga fram dyr bearbetning.
  • Öka din faktura genom lagringstillväxt eller bandbreddstunga nedladdningar.

Kartlägg sedan svagheterna. Upload-endpointen är ytterdörren (för stora filer, konstiga format, hög begärandefrekvens). Lagring är bakrummet (publika buckets, felaktiga behörigheter, delade mappar). Nedladdnings-URL:er är utgången (förutsägbara, långlivade eller inte knutna till en användare).

Exempel: en ”CV-uppladdning”. En bot laddar upp tusentals stora PDF:er för att driva upp kostnader, medan en missbrukande användare laddar upp en HTML-fil och delar den som ett ”dokument” för att lura andra.

Innan du lägger på kontroller, bestäm vad som betyder mest för din app: sekretess (vem kan läsa), tillgänglighet (kan ni fortsätta leverera), kostnad (lagring och bandbredd) och efterlevnad (var data lagras och hur länge ni behåller den). Denna prioritetslista håller besluten konsekventa.

Behörigheter och åtkomstkontroll som faktiskt håller

De flesta uppladdningsincidenter är inga avancerade hack. Det är enkla ”jag kan se någon annans fil”-buggar. Behandla behörigheter som en del av uppladdningar, inte som en funktion du lägger på i efterhand.

Börja med en regel: default deny. Anta att varje uppladdat objekt är privat tills du uttryckligen tillåter åtkomst. ”Privat som standard” är en stark baslinje för fakturor, medicinska filer, kontodokument och allt som är knutet till en användare. Gör filer publika bara när användaren klart förväntar sig det (som en publik avatar), och överväg tidsbegränsad åtkomst även då.

Roller som matchar verkligt arbete

Håll roller enkla och separerade. En vanlig uppdelning är:

  • Uploader: kan skapa uppladdningar för sitt eget konto
  • Viewer: kan ladda ner filer de har rätt till
  • Support: kan komma åt filer endast med ett granskbart, temporärt beviljande
  • Admin: kan hantera policy, men bör inte automatiskt läsa allt

Lita inte på mappnivåregler som ”allt i /user-uploads/ är okej.” Kontrollera ägarskap eller tenant-åtkomst vid lästid, för varje fil. Det skyddar när någon byter team, lämnar en organisation eller en fil återtilldelas.

Ett bra supportmönster är snävt och temporärt: ge åtkomst till en specifik fil, logga det och låt åtkomsten gå ut automatiskt.

Validera filtyp utan att lita på klienten

De flesta uppladdningsattacker börjar med ett enkelt knep: en fil som ser säker ut på grund av sitt namn eller en header från webbläsaren, men som i själva verket är något annat. Behandla allt klienten skickar som osäkrat.

Börja med en allowlist: bestäm exakt vilka format ni accepterar (till exempel .jpg, .png, .pdf) och avvisa allt annat. Undvik ”vilken bild som helst” eller ”vilket dokument som helst” om ni inte verkligen behöver det.

Lita inte på filändelsen eller Content-Type-headern från klienten. Båda är lätta att förfalska. En fil som heter invoice.pdf kan vara en körbar fil, och Content-Type: image/png kan vara falsk.

Ett starkare tillvägagångssätt är att inspektera filens första bytes, ofta kallat ”magic bytes” eller filsignatur. Många vanliga format har konsekventa headers (som PNG och JPEG). Om headern inte matchar det ni tillåter, avvisa filen.

En praktisk valideringsupplägg:

  • Allowlista de filändelser ni accepterar (server-side lista).
  • Bestäm MIME-typ på servern (inte klientens header).
  • Sniffa magic bytes för de format ni stödjer.
  • Generera ett nytt slumpmässigt lagringsnamn och spara originalnamnet som metadata.
  • Blockera riskfyllda format om ni inte verkligen behöver dem, särskilt HTML, SVG och skriptliknande innehåll.

Byt namn vid lagring betyder mer än det låter. Om ni sparar användarlevererade namn direkt bjuder ni in statussprång, konstiga tecken och oavsiktliga överskrivningar. Använd ett genererat ID för lagring och håll originalfilnamnet endast för visning.

För profilbilder: acceptera bara JPEG och PNG, verifiera headers och ta bort metadata om möjligt. För dokument, överväg att begränsa till PDF och avvisa allt med aktivt innehåll. Om ni senare behöver SVG eller HTML, behandla dem som potentiellt exekverbara och isolera dem.

Storleksgränser, rate limits och DoS-grunderna

De flesta uppladdningsavbrott är inte ”fancy hacker tricks.” Det är enorma filer, för många förfrågningar eller långsamma anslutningar som binder servrar tills appen känns nere. Behandla varje byte som en kostnad.

Sätt storleksgränser där de fungerar

Välj en maxstorlek per funktion, inte ett globalt tal. En avatar behöver inte samma gräns som ett skattedokument eller en kort video. Sätt den minsta gräns som ändå känns normal, och lägg till en separat ”stor uppladdning”-väg endast när ni verkligen behöver det.

Hårdför gränser på mer än ett ställe, eftersom klienter kan ljuga: i applogik, på webbservern eller reverse-proxy, med upload-timeouter och med tidigt avslag när angiven storlek är för stor (innan hela bodyn lästs).

Konktret exempel: avatarer begränsade till 2 MB, PDF:er till 20 MB, och allt större kräver ett annat flöde (som direkt-till-objektlagring med en signerad URL).

Rate limits och missbrukskontroller

Även små filer kan bli en DoS om någon laddar upp dem i en loop. Lägg in rate limits på uppladdningsendpoints per användare och per IP. Överväg striktare gränser för anonym trafik än för inloggade användare.

Resumable uploads hjälper verkliga användare på dåliga nätverk, men sessionstoken måste vara hårda: kort livslängd, knuten till användaren och bunden till en specifik filstorlek och destination. Annars blir ”resume”-endpoints en gratis kanal in i er lagring.

När ni blockerar en uppladdning, returnera tydliga fel för användaren (fil för stor, för många förfrågningar) men läcka inte interna detaljer (stacktraces, bucket-namn, leverantörsdetaljer).

Säkra lagrings- och leveransval

Håll data där den hör hemma
Välj var din app körs för att matcha sekretess- och gränsöverskridande krav.
Kom igång

Säkra uppladdningar handlar inte bara om vad ni accepterar. Det handlar också om var filen hamnar och hur ni lämnar tillbaka den senare.

Håll uppladdade bytes utanför er huvuddatabas. De flesta appar behöver bara metadata i DB:n (ägare user ID, originalfilnamn, uppräknad typ, storlek, checksum, lagringsnyckel, skapad tid). Spara bytes i objektlagring eller en filservice byggd för stora blobbar.

Separera publika och privata filer på lagringsnivå. Använd olika buckets eller containrar med olika regler. Publika filer (som offentliga avatarer) kan vara läsbara utan inloggning. Privata filer (kontrakt, fakturor, medicinska dokument) ska aldrig vara publikt läsbara, även om någon gissar URL:en.

Undvik att servera användarfiler från samma domän som din app när ni kan. Om en riskfylld fil slinker igenom (HTML, SVG med skript eller webbläsarens MIME-sniffing) kan hosting på huvuddomänen leda till kontoövertagande. En dedikerad nedladdningsdomän (eller lagringsdomän) begränsar skadorna.

Vid nedladdningar, tvinga säkra headers. Ange en förutsägbar Content-Type baserat på vad ni tillåter, inte vad användaren påstår. För allt som kan tolkas av en webbläsare, föredra att skicka det som en nedladdning.

Några standardval som förhindrar överraskningar:

  • Använd Content-Disposition: attachment för dokument.
  • Använd en säker Content-Type (eller application/octet-stream).
  • Spara och servera med opaka objektnycklar (inte användarfiler).
  • Logga nedladdningar av privata filer.

Retention är också säkerhet. Radera övergivna uppladdningar, ta bort gamla versioner efter ersättning och sätt tidsbegränsningar för temporära filer. Mindre data som lagras = mindre som kan läcka.

Signerade URL:er: när använda dem och hur hålla dem snäva

Signerade URL:er (pre-signed URLs) är ett vanligt sätt att låta användare ladda upp eller ladda ner filer utan att göra din lagringsbucket publik och utan att skicka varje byte genom ditt API. URL:en bär temporär behörighet och går sedan ut.

Två vanliga flöden:

  • Direkt-till-lagring-uppladdning: din app utfärdar en kortlivad signerad URL och webbläsaren laddar upp direkt till objektlagringen.
  • Uppladdning via servern: filen träffar ditt API först, sedan lagrar din server den.

Direct-to-storage minskar API-belastning, men gör lagringsregler och URL-begränsningar viktigare.

Hur hålla signerade URL:er snäva

Behandla en signerad URL som en engångsnyckel. Gör den specifik och kortlivad.

  • Låt skriv-URL:er gå ut snabbt (ofta 1–5 minuter). Håll läs-URL:er i minuter, inte dagar.
  • Binda URL:en till exakt det objektnyckel du förväntar dig (en objektnyckel, inte en mapp).
  • Lägg på begränsningar där det stöds: förväntad content type, maxstorlek, checksumma.
  • Utfärda URL:er endast efter behörighetskontroller.
  • Logga vem som begärde URL:en och varför (user ID, objektnyckel, syfte, IP/user agent).

Ett praktiskt mönster är att skapa en upload-post först (status: pending), sedan utfärda den signerade URL:en. Efter uppladdning, bekräfta att objektet finns och matchar förväntad storlek och typ innan du markerar det som klart.

Steg-för-steg: ett säkert uppladdningsflöde ni kan implementera

Bygg för web och mobil
Skapa React-, Go- och Flutter-appar som delar en och samma uppladdningspolicy.
Starta projekt

Ett säkert uppladdningsflöde är mest tydliga regler och tydligt tillstånd. Behandla varje uppladdning som osäker tills kontrollerna är klara.

Skriv ner vad varje funktion tillåter. En profilbild och ett skattedokument bör inte dela samma filtyper, storleksgränser eller synlighet.

Ett praktiskt flöde (med verkliga statusar)

  1. Definiera tillåtna typer och en per-funktion maxstorlek (t.ex.: bilder upp till 5 MB; PDF:er upp till 20 MB). Hårdför samma regler i backend.

  2. Skapa en ”upload record” innan bytes anländer. Spara: ägare (user eller org), syfte (avatar, faktura, bilaga), originalfilnamn, förväntad maxstorlek, och en status som pending.

  3. Ladda upp till en privat plats. Låt inte klienten välja slutgiltig sökväg.

  4. Validera igen server-side: storlek, magic bytes/typ, allowlist. Om den passerar, flytta status till uploaded.

  5. Skanna efter skadlig kod och uppdatera status till clean eller quarantined. Om skanning är asynkron, håll åtkomst låst medan ni väntar.

  6. Tillåt nedladdning, förhandsvisning eller bearbetning endast när status är clean.

Litet exempel: för en profilbild, skapa en post knuten till användaren och syftet avatar, lagra privat, bekräfta att det verkligen är JPEG/PNG (inte bara namngivet så), skanna det och generera sedan en förhandsgransknings-URL.

Grundläggande mönster för skanning (utan att lova för mycket)

Skannning är ett säkerhetsnät, inte ett löfte. Det fångar kända dåliga filer och uppenbara trick, men det kommer inte att upptäcka allt. Målet är enkelt: minska risken och gör okända filer harmlösa som standard.

Ett pålitligt mönster är: quarantaine först. Spara varje ny uppladdning i en privat, icke-publik plats och markera den som pending. Först efter att den klarat kontroller flyttar ni den till en ”clean”-plats (eller markerar den som tillgänglig).

Synkrona skanningar fungerar bara för små filer och låg trafik eftersom användaren väntar. De flesta appar skannar asynkront: acceptera uppladdningen, returnera ett ”processing”-läge, skanna i bakgrunden.

Vad ”grundläggande skanning” oftast inkluderar

Grundläggande skanning brukar vara en antivirusmotor (eller tjänst) plus några skydd:

  • AV-scan
  • Filtypkontroller (magic bytes)
  • Arkivgränser (zip-bomber, inbäddade zips, enorm outpackad storlek)
  • Blockera format ni inte behöver

Om skannern misslyckas, timear ut eller svarar ”okänt”, behandla filen som misstänkt. Quaraintea den och erbjud ingen nedladdningslänk. Här bränner sig team ofta: ”scan failed” får inte bli ”skicka ändå”.

När ni blockerar en fil, håll meddelandet neutralt: ”Vi kunde inte acceptera filen. Försök en annan fil eller kontakta support.” Påstå inte att ni upptäckte skadlig kod om ni inte är säkra.

Exempel: profilbild och dokumentuppladdning i en vanlig app

Tänk på två funktioner: en profilbild (visas publikt) och ett PDF-kvitto (privat, används för fakturering eller support). Båda är uppladdningsproblem, men de ska inte dela samma regler.

För profilbilden: håll det strikt: tillåt endast JPEG/PNG, sätt maximal storlek (t.ex. 2–5 MB) och re-koda server-side så att ni inte serverar användarens ursprungliga bytes. Lagra publikt först efter kontroller.

För PDF-kvittot: acceptera en större storlek (t.ex. upp till 20 MB), håll den privat som standard och undvik att rendrera den inline från er huvudappdomän.

En enkel statusmodell håller användare informerade utan att exponera intern info:

  • pending: användaren valde en fil, uppladdning ej påbörjad
  • uploaded: lagringen tog emot bytes
  • scanning: bakgrundsjobb undersöker filen
  • clean (eller rejected): filen är tillgänglig (eller blockerad)

Signerade URL:er passar väl in här: använd en kortlivad signerad URL för uppladdning (skriv-only, en objektnyckel). Utfärda en separat kortlivad signerad URL för läsning, och endast när status är clean.

Logga det du behöver för utredning, inte filen i sig: user ID, file ID, typgissning, storlek, lagringsnyckel, tidsstämplar, skanningsresultat, request IDs. Undvik att logga rått innehåll eller känslig data som hittas i dokument.

Vanliga misstag och enkla fallgropar

Rollback riskfyllda ändringar
Använd snapshots och rollback när ni skärper uppladdningsregler under snabb iteration.
Prova snapshots

De flesta uppladdningsbuggar uppstår för att ett litet ”temporärt” snabbtips blir permanent. Anta att varje fil är osäker, varje URL kommer att delas och varje ”vi fixar det senare”-inställning kommer att glömmas.

Fallgropar som ofta återkommer:

  • Lita enbart på klientkontroller. Webbläsare kan kringgås på sekunder.
  • Låt inte användare påverka sökvägar, filnamn eller objektnycklar.
  • Gör inte uppladdningar publika ”bara för en stund”.
  • Använd inte signerade URL:er som lever för länge eller fungerar för flera användare.
  • Servera filer med fel Content-Type, så att webbläsaren tolkar riskfyllt innehåll.

Övervakning är det team hoppar över tills lagringsfakturan skjuter i höjden. Mät uppladdningsvolym, medelstorlek, toppuppladdare och felprocent. Ett komprometterat konto kan tyst ladda upp tusentals stora filer över en natt.

Exempel: ett team sparar avatarer under användargivna filnamn som ”avatar.png” i en delad mapp. En användare skriver över andras bilder. Lösningen är tråkig men effektiv: generera objektnycklar server-side, håll uppladdningar privata som standard och exponera en ändrad bild via ett kontrollerat svar.

Snabb checklista och nästa steg

Använd detta som en sista genomgång innan ni släpper. Behandla varje punkt som ett blockeringskrav, eftersom de flesta incidenter kommer från en saknad skyddsåtgärd.

Snabb checklista

  • Validera på servern med en allowlist, verkliga innehållskontroller (inte bara filnamnet) och en hård maxstorlek per fil.
  • Spara uppladdningar privata som standard och kontrollera behörigheter varje gång en fil läses, laddas ner eller förhandsvisas.
  • Om ni använder signerade URL:er: håll dem kortlivade, scopeade till en objektnyckel och logga utfärdandet för spårning.
  • Quarantaine först, skanna sedan: generera inga förhandsgranskningar eller tillåt nedladdning förrän filen är clean.
  • Tvinga säker nedladdningsbeteende: förutsägbar Content-Type, säkra filnamn och attachment för dokument.

Nästa steg som lönar sig

Skriv ner era regler i klar text: tillåtna typer, maxstorlekar, vem som kan se vad, hur länge signerade URL:er lever och vad ”scan passed” innebär. Det blir det gemensamma kontraktet mellan produkt, engineering och support.

Lägg till några tester som fångar vanliga fel: överstora filer, omdöpta körbara filer, obehöriga läsningar, utgångna signerade URL:er och ”scan pending”-nedladdningar. Dessa tester är billiga jämfört med en incident.

Om ni bygger och itererar snabbt hjälper det att använda ett arbetsflöde där ni kan planera ändringar och rulla tillbaka säkert. Team som använder Koder.ai (koder.ai) brukar förlita sig på planning mode och snapshots/rollback medan de skärper uppladdningsregler över tid, men kärnkravet är alltid detsamma: backend ska driva policyn, inte UI:n.

Vanliga frågor

Vad är minimum jag bör göra för att göra filuppladdningar ”tillräckligt säkra”?

Starta med privat som standard och behandla varje uppladdning som osäker indata. Tillämpa fyra grundläggande regler på serversidan:

  • Vem kan ladda upp
  • Vilka filtyper ni accepterar (allowlist)
  • Hur stora/hur ofta (storleks- + ratebegränsningar)
  • Vem som kan läsa filen senare (per-fil behörighetskontroller)

Om ni tydligt kan svara på de här punkterna ligger ni redan före många incidenter.

Varför är filuppladdningar ett vanligt första säkerhetsincident?

För att användare kan ladda upp en ”mystery box” som din app lagrar och senare kanske visar för andra. Det kan leda till:

  • Obehörig åtkomst till privata dokument
  • Phishing eller kontoövertagande om en fil serveras som betrodd webbinnehåll
  • Driftstörningar och höga kostnader från massuppladdningar eller mycket stora filer

Det är sällan bara “någon laddade upp ett virus”.

Vad är skillnaden mellan att lagra filer och att leverera filer, och varför spelar det roll?

Att lagra är att spara bytes. Att leverera är att skicka dessa bytes till webbläsare och appar.

Faran uppstår när din app serverar uppladdat innehåll med samma nivå av förtroende och regler som huvudwebbplatsen. Om en riskfylld fil behandlas som en vanlig sida kan webbläsaren köra den (eller användare litar på den för mycket).

En säkrare grundregel: lagra privat, och servera sedan genom kontrollerade nedladdningssvar med säkra headers.

Hur stoppar jag användare från att ladda ner någon annans uppladdade fil?

Använd default deny och kontrollera åtkomst varje gång en fil laddas ner eller förhandsvisas.

Praktiska regler:

  • Varje filpost ska ha en ägare (user/org) och ett syfte (avatar, faktura osv.)
  • Vid läs/nedladdning verifiera att förfrågaren har rätt till just den filen
  • Undvik mappbaserad säkerhet som ”allt under /uploads/ är okej”
  • Ge support åtkomst temporärt och loggat (tillåt åtkomst till en fil som löper ut automatiskt)
Hur validerar jag filtyp utan att lita på filnamn eller Content-Type?

Lita inte på filnamnstillägg eller webbläsarens Content-Type. Validera på serversidan:

  • Använd en allowlist över format per funktion (t.ex. JPEG/PNG för avatarer, PDF för kvitton)
  • Bestäm typ server-side och kontrollera magic bytes (filsignatur)
  • Byt filnamn för lagring till ett slumpat ID; spara originalnamn som metadata
  • Blockera riskfyllda format ni inte behöver (särskilt HTML, SVG och skrip-liknande innehåll)
Vilka gränser bör jag sätta för att förhindra DoS-attacker via uppladdningar?

Driftstörningar kommer ofta från tråkigt missbruk: för många uppladdningar, jättestora filer eller långsamma anslutningar som binder upp resurser.

Bra standarder:

  • Sätt maxstorlek per funktion (avatarer små, dokument större)
  • Hårdför begränsningar på flera nivåer (app + reverse proxy + timeouter)
  • Lägg in rate limits per användare och per IP; hårdare för anonyma

Behandla varje byte som en kostnad och varje begäran som potentiellt missbruk.

Bör jag använda signerade URL:er för uppladdningar, och vad är säkrast som standard?

Ja — men gör det noggrant. Signerade URL:er låter webbläsaren ladda upp/ned direkt till objektlagring utan att göra hela bucketen publik.

Bra standarder:

  • Håll skriv-URL:er kortlivade (ofta 1–5 minuter)
  • Scopea varje URL till en objektnyckel, inte en mapp
  • Utfärda URL:er först efter behörighetskontroller
  • Logga vem som begärde URL:en och för vilken fil

Direct-to-storage minskar API-last, men gör scoping och expiration icke förhandlingsbart.

Vad är ett säkert steg-för-steg-uppladdningsflöde jag kan implementera?

Det säkraste mönstret är:

  1. Skapa en upload-post med status pending
  2. Ladda upp bytes till en privat plats
  3. Validera storlek + typ (magic bytes) server-side
Behöver jag verkligen skanning efter skadlig kod, och hur ser ”grundläggande skanning” ut?

Skanning hjälper men är inget löfte. Använd det som ett säkerhetsnät, inte som enda kontroll.

Praktiskt angreppssätt:

  • Quarantaina först: exponera inga länkar innan skanning är klar
  • Skanna asynkront för att skala; visa ”bearbetar” för användaren
  • Om skanningen misslyckas eller timear ut, behandla filen som misstänkt och blockera den
  • Lägg in skydd för arkiv (zip-bomber, enorm outpackad storlek) om ni tillåter arkiv

Nyckeln är policy: ”inte skannad” = aldrig ”tillgänglig”.

Hur bör jag leverera uppladdade filer säkert (headers, domäner, downloads)?

Servera filer så att webbläsaren inte kan tolka dem som webbsidor.

Bra standarder:

  • Sätt Content-Disposition: attachment för dokument
  • Använd en säker, servervald Content-Type (eller application/octet-stream)
Innehåll
Varför filuppladdningar är riskfyllda (på enkelt språk)En enkel hotmodell för uppladdningarBehörigheter och åtkomstkontroll som faktiskt hållerValidera filtyp utan att lita på klientenStorleksgränser, rate limits och DoS-grundernaSäkra lagrings- och leveransvalSignerade URL:er: när använda dem och hur hålla dem snävaSteg-för-steg: ett säkert uppladdningsflöde ni kan implementeraGrundläggande mönster för skanning (utan att lova för mycket)Exempel: profilbild och dokumentuppladdning i en vanlig appVanliga misstag och enkla fallgroparSnabb checklista och nästa stegVanliga frågor
Dela
Koder.ai
Build your own app with Koder today!

The best way to understand the power of Koder is to see it for yourself.

Start FreeBook a Demo

De flesta verkliga buggar är enkla “jag kan se en annan användares fil”-fel.

Om bytesen inte matchar ett tillåtet format, avvisa uppladdningen.

  • Skanna (vanligtvis asynkront) och sätt status till clean eller quarantined
  • Tillåt nedladdning/förhandsvisning endast när status är clean
  • Detta förhindrar att ”scan failed” eller ”still processing”-filer delas av misstag.

  • Använd opaka lagringsnycklar (inte användarföreslagna filnamn) i URL:er
  • Föredra en separat nedladdningsdomän för användarinnehåll när möjligt
  • Detta minskar risken att en uppladdad fil blir en phishing-sida eller kör skript.