webForumDet fria alternativet

icket nedladdningsbara filer?

.NET

14 svar · 735 visningar · startad av perssonjoel

Medlem sedan okt. 200627 inlägg
Frågan#1

Finns det nån som vet hur man ska gå tillväga för att "gömma" vissa filer från allmänheten? Alltså, att filerna på en utvald plats inte ska gå att ladda ner om inte min webbapplikation godkänt det?
..och hur skulle man då kunna få sin webbapplikation att godkänna det?

Medlem sedan maj 20012 812 inlägg
#2

Du måste lägga filerna utanför din website och sedan ströma ner filen till besökaren när någon efterfrågar filen.

Om du gör så så finns det ingen direktlänk till filen, utan man måste gå via en speciell sida där du hämtar upp filen och sedan strömmar ut den till webläsaren.

Det finns dock 2 problem här. Det första är prestandan som blir lidande eftersom du låter servern jobba varje gång som någon skall hämta en fil, det andra är att du ändå inte är säker på att någon inte kan komma åt din fil på ett sätt som du inte har tänkt dig.

Det hela blir dock mer komplicerat för någon att "sno" dina filer, men det går att komma runt om man bara vill.

När det gäller godkännandet så är frågan, när vill du att det är okej att dina besökare kan ladda ner filen?

- M

Medlem sedan feb. 200112 078 inlägg
#3

Gladh skrev:

Det finns dock 2 problem här. Det första är prestandan som blir lidande eftersom du låter servern jobba varje gång som någon skall hämta en fil, **det andra är att du ändå inte är säker på att någon inte kan komma åt din fil på ett sätt som du inte har tänkt dig.

Det hela blir dock mer komplicerat för någon att "sno" dina filer, men det går att komma runt om man bara vill.**

Jasså? Som han skriver vill han ju låta applikationen avgöra vem som får ladda ner filer eller inte, vilket jag tolkar som ganska säkert? Har du en inloggning eller en handshake innan filen börjar stream'as, finns det ju ingen chans att få tag på filen, såvida man inte har en kasst skriven applikation..?

Medlem sedan juli 20011 084 inlägg
#4

Borde man inte bara kunna använda sig av en HttpModule som kontrollerar ifall filtypen är samma som de du vill skydda (jpg/gif/avi/etc.). I så fall kontrollerar du först så att besökaren är inloggad (eller har rättigheter att se bilden). Har de inte det stoppar du requsten med ett HttpException? Annars släpper du igenom besökaren som vanligt.

Nu kräver nog detta visserligen att man har rättigheter att mappa filändelserna mot asp.net motorn.

Jag har i alla fall själv tänkt på en liknande lösning, vet dock inte om den är helt genomförbar men man behöver då inte stream ut filerna utan stoppar endast felaktiga anrop. Någon med mer kunskap får gärna klargöra? :)

Medlem sedan juni 20014 421 inlägg
#5

Hmm, nu vet jag inte om det finns nåt sätt som detta är implementerbart i .NET.

Men hade det varit på ett *nix-system hade jag skapat en symlink baserat på användarens hashade ip förutsatt att användare får ladda hem filen. Sedan skapat en url som innehåller det hashade ipt som jag sedan fångar upp mha htaccess och spottar ut filen genom att följa symlinken.
Symlinken går egentligen till ett ställe utanför webbroten.

Vet inte om det finns nåt liknande system för .NET

Medlem sedan dec. 19996 721 inlägg
#6

colione skrev:

Vet inte om det finns nåt liknande system för .NET

Det är mer en fråga om vad operativsystemet/filsystemet klarar, så visst skulle man kunna använda det i .NET/Mono på en Unix-burk. I NTFS finns hardlinks som man kan skapa från .NET.

Men, det är ingen vidare bra lösning ändå. Man måste generera länkarna i förtid, ha en upprensningmekanism som tar bort länkarna och dessutom krävs skrivrättigheter utöver vad som egentligen borde behövas.

Medlem sedan maj 20012 812 inlägg
#7

override skrev:

Jasså? Som han skriver vill han ju låta applikationen avgöra vem som får ladda ner filer eller inte, vilket jag tolkar som ganska säkert? Har du en inloggning eller en handshake innan filen börjar stream'as, finns det ju ingen chans att få tag på filen, såvida man inte har en kasst skriven applikation..?

Eftersom du kan komma åt filen via en webbrowser när du surfar runt på hans sida, så kan jag komma åt filen från min site och lägga upp den där, genom att jag låter min kod emulera att jag surfar till hans sida, loggar in och hämtar filen. Och vips så sitter där en bild på min sida som jag snott från hans, fast jag inte kunnat skriva in URL direkt.

Klart med komplicerat, men helt klart genomförbart.

- M

Medlem sedan juni 20014 421 inlägg
#8

emission skrev:

Det är mer en fråga om vad operativsystemet/filsystemet klarar, så visst skulle man kunna använda det i .NET/Mono på en Unix-burk. I NTFS finns hardlinks som man kan skapa från .NET.

Men, det är ingen vidare bra lösning ändå. Man måste generera länkarna i förtid, ha en upprensningmekanism som tar bort länkarna och dessutom krävs skrivrättigheter utöver vad som egentligen borde behövas.

Nja, jag håller inte med om att den är så dålig som du säger. På nåt sätt ska det ju avgöras vad, när och hur användaren ska få access till filerna, det är ju bara att generera symlinksen då.
När användaren väljar att följa länken är det ju inget som hindrar att man låter symlink-namnet gå igenom en php-fil som gör ett databasuppslag som berättar hur många nedladdningar/hur lång tid som användaren får komma åt filen.
Sen finns det väl inget som hindrar dig från att lägga filen på ett ställe där du redan har skrivrättigheter?

Medlem sedan juni 20008 205 inlägg
#9

Man behöver inte streama, HTTP-autentisering finns ju. Inte lika gulligt som vanlig sessionsbaserad inloggning, men funkar finfint.

Medlem sedan dec. 19996 721 inlägg
#10

colione skrev:

På nåt sätt ska det ju avgöras vad, när och hur användaren ska få access till filerna, det är ju bara att generera symlinksen då.
När användaren väljar att följa länken är det ju inget som hindrar att man låter symlink-namnet gå igenom en php-fil som gör ett databasuppslag som berättar hur många nedladdningar/hur lång tid som användaren får komma åt filen.

...och vad har du då vunnit på att använda denna lösning?

colione skrev:

Sen finns det väl inget som hindrar dig från att lägga filen på ett ställe där du redan har skrivrättigheter?

Det är inget stort problem, det håller jag med om, men det är dock en aspekt som kan ha relevans.

Medlem sedan juni 20014 421 inlägg
#11

Jag slipper streama-filen. ;) Men får ändå säkerhet.

Medlem sedan feb. 200112 078 inlägg
#12

Gladh skrev:

Eftersom du kan komma åt filen via en webbrowser när du surfar runt på hans sida, så kan jag komma åt filen från min site och lägga upp den där, genom att jag låter min kod emulera att jag surfar till hans sida, loggar in och hämtar filen. Och vips så sitter där en bild på min sida som jag snott från hans, fast jag inte kunnat skriva in URL direkt.

Klart med komplicerat, men helt klart genomförbart.

Detta kallas "internet" och är inte alls komplicerat. Men nu förutsatte jag att begränsningen skulle gälla inom givna ramar för vem som är inloggad/har tillträde eller inte. Förutsätter man att alla har alla credentials för att uppfylla en viss gräns, så är ju inget säkert.

Som sagt, det har ju med applikationen i sin helhet att göra. Har någon lyckats komma över data som tillåter inloggning är felet där, inte i applikationen i sig. Men, visst kan man använda tokens eller andra personliga identifieringsmetoder för att hårdare sätta gränsen för hur länge en session/inloggning gäller och för exakt vem.

Medlem sedan okt. 200627 inlägg
#13

Tanken med alltihopa är att filen ska gå att ladda ner, så streama är inte ett alternativ. Dock så måste jag kunna reglera vem som laddar ner.
Jag sitter på ett aleborg konto, och att lägga filer oåtkomligt för allmänheten är inget bekymmer... bekymret är ju då att få den därifrån...

Medlem sedan dec. 19996 721 inlägg
#14

perssonjoel skrev:

Tanken med alltihopa är att filen ska gå att ladda ner, så streama är inte ett alternativ.

Streama = skicka ut filen som en dataström från en applikation, i detta fall en ASP.NET-sida (eller HttpModule). Helt klart möjligt.

I sin enklaste form kan du använda Response.WriteFile

Medlem sedan dec. 19996 721 inlägg
#15

colione skrev:

Jag slipper streama-filen. ;)

Du överlåter streamandet till webbserverprogramvaran. Underheaden (det måste väl vara motsatsen till overhead?) är inte nödvändigtvis så stor. YMMV.

Gör en lösning som du trivs med, men låt inte rädsla för egen streaming hålla dig borta från smidiga lösningar.

282 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
144 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
145 ms — ändringar (db)