WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Filåtkomst i IIS (https://www.wn.se/forum/showthread.php?t=8490)

Fluffe 2005-06-15 18:49

Citat:

Originally posted by Robert@Jun 15 2005, 17:03
Page.Response.ContentType = "image/jpeg" även i .Net, men det går väl att använda Page.Response.AppendHeader(name as string, value as string) om du vill bygga din egen header.

Föresten, du nämnde aspx så då antar jag att du kör .net eller? Då kan du väl lägga en web.config fil i valfri map om du vill specialsätta regler för just den mappen. Kolla upp om det går med just säkerhet. Tänk på att alla förfrågningar till filer paserar inte .net "motorn" utan skickas av IIS'en på sidan om. Detta borde göra så att du kan ha olika rättigheter för filerna (dvs anonymous) och sedan låta din aspx-kod impersonate ett annat konto med andra rättigheter...? jaja, bara lite idéer som dök upp.

Jo, jag har kollat en hel del på detta men gått bet även här. Jag använder mig av FormsAuthentication, så har möjligheten att skydda bilderna genom att lägga in en web.config som nekar alla utom t.ex. en användare. Dock har jag inte lyckats skifta över till denna användare innan asp.net har spärrat filern. Vet inte riktigt hur man ska skifta användare på ett vettigt sätt heller.

Någon idé?

Micke_N 2005-06-15 23:10

Citat:

Originally posted by Fluffe@Jun 15 2005, 11:41
Jag skulle vilja neka tillträde för direkt åtkomst av alla filer i en viss katalog på min webbserver (IIS).
Alltså, t.ex ska man inte kunna skriva: http://någonsite.se/bilder/test.jpg

Men, jag vill kunna ladda bilderna från sidor som ligger på siten. D.v.s. i en html fil <img src=... >.
Har gogglat en massa, och provat alla möjliga lösningar men får resultatet att antingen kommer man inte åt filerna alls, eller så har man full åtkomst till alla filer.

Några förslag? Kanske inte går?

@ Fluffe
Exakt vad är det som du vill ha utfört? Hur du än vrider och vänder på det hela så kan du aldrig skydda en bild som visas på nätet. Man kommer alltid åt den på ett eller anant sätt.

Som jag uppfattade ditt första inlägg så vill du helt enkelt bara ladda filerna från filsystemet från en mapp som inte är tillgänglig via nätet.

Du fick ett par alternativ där du enkelt laddar upp dem via en aspx sida i IMG taggen. ge mig en tydlig bild av vad du vill ha utfört så skall jag visa i .NET (aspx ) hur man kan göra.

/M

tydal 2005-06-15 23:58

Det är sant att man inte kan hindra besökarna från att spara eller kopiera bilderna. Det är jag den förste att erkänna:
http://www.tydal.nu/article/88
http://www.tydal.nu/article/61

Men som jag fattade frågan vill han inte att det ska gå att nå bilderna på något annat sätt än via hemsidan. Dvs, man ska inte kunna ange någon URL på adressraden som går direkt till bilden.

Att bara hämta bilderna via ett skript gör ju varken till eller från, allt som sker är bara att bilderna får en annan URL, men det går att hämta dem direkt precis som tidigare.

För att göra så de enbart (nåja) blir tillgängliga genom img-taggen på en viss hemsida så måste det till en ytterligare kontroll. Exempelvis slumptalslösningen som jag beskrivit.

Robert 2005-06-16 08:43

Citat:

Originally posted by tydal@Jun 15 2005, 23:58
Det är sant att man inte kan hindra besökarna från att spara eller kopiera bilderna. Det är jag den förste att erkänna:
http://www.tydal.nu/article/88
http://www.tydal.nu/article/61

Men som jag fattade frågan vill han inte att det ska gå att nå bilderna på något annat sätt än via hemsidan. Dvs, man ska inte kunna ange någon URL på adressraden som går direkt till bilden.

Att bara hämta bilderna via ett skript gör ju varken till eller från, allt som sker är bara att bilderna får en annan URL, men det går att hämta dem direkt precis som tidigare.

För att göra så de enbart (nåja) blir tillgängliga genom img-taggen på en viss hemsida så måste det till en ytterligare kontroll. Exempelvis slumptalslösningen som jag beskrivit.

Mjao, slumptalslösningen är kanske inte helt optimal, jag skulle hellre satsa på en hash baserad på filnamn + dagens datum + salt-värde. Då är bilden endast "giltigt" samma dag som aspx-sidan genererade hashcoden. Dessutom slipper man lagra värdet i databasen då det går att räkna ut på direkten. Eller varför inte ta den anropandes IP och använda när du hashar fram hashvärdet?

Jag ser inte (nu är jag läste om kravet lite nogrannare) heller någon annan lösning. Det är ju trots allt ett html-resultat hos klienten som gör ett anrop mot bilden. Man kan inte förlita sig på refererers heller...

Fluffe 2005-06-16 10:13

Ok, var nog lite otydlig i min specifikation. Att en användare laddar ner bilden när han/hon väl får upp den bekommer mig inte. Håller på med en applikation som är användarbaserad. Och bilderna som administratören tilldelar användarna ska enbart kunna ses av den valda användaren. Ska därför inte vara möjligt att kunna ladda dem genom att ange direktlänk.

Tror jag funnit en acceptabel lösning. Finns tydligen möjlighet att i asp.net skriva en egen httpHandler och sedan koppla denna till specifika filtyper. I handler kan man titta på hur förfrågan inkommit och ta ställning till vad som ska göras. På detta sätt kan man även skydda sig från extern länkning (om man nu vill det).

Får utvärdera möjligheterna nu under förmiddagen.

tydal 2005-06-16 10:28

> Och bilderna som administratören tilldelar användarna ska enbart kunna
> ses av den valda användaren. Ska därför inte vara möjligt att kunna ladda
> dem genom att ange direktlänk.

Men den valda användaren ska väl kunna ladda dem genom att ange direktlänk?

I så fall är det ju inga problem. Du gör som Micke N tidigare beskrivit med LoadImage.aspx och lägger bilderna utanför wwwroot. Sen blir ju villkoret för att visa bilden att den inloggade användaren har fått den tilldelad sig, vilket du lämpligen håller reda på i en databas.

Fluffe 2005-06-16 14:00

Citat:

Originally posted by tydal@Jun 16 2005, 10:28
> Och bilderna som administratören tilldelar användarna ska enbart kunna
> ses av den valda användaren. Ska därför inte vara möjligt att kunna ladda
> dem genom att ange direktlänk.

Men den valda användaren ska väl kunna ladda dem genom att ange direktlänk?

I så fall är det ju inga problem. Du gör som Micke N tidigare beskrivit med LoadImage.aspx och lägger bilderna utanför wwwroot. Sen blir ju villkoret för att visa bilden att den inloggade användaren har fått den tilldelad sig, vilket du lämpligen håller reda på i en databas.

Hehe.. förlåt, jag är värdelös på specifikationer. En annan faktor i det hela är att jag använder en inköpt modul som har begränsningar i uppladdning av bilderna. Bilderna måste med andra ord ligga "internt".

Men jag skrev en httpHandler, och drar igenom alla .jpg bilder genom den. Fungerar fint nu. En bonus man får genom denna lösningen är att man skyddar även bilderna från länkning på ett snyggt sätt. Bilden blir inte bara spärrad, utan man kan byta ut dem mot en annan bild som säger t.ex. "Besök bla bla för korrekt bild", om det nu är något man vill.

Tackar alla för hjälpen!

Robert 2005-06-16 14:39

Citat:

Ursprungligen postat av Fluffe
Citat:

Ursprungligen postat av tydal
> Och bilderna som administratören tilldelar användarna ska enbart kunna
> ses av den valda användaren. Ska därför inte vara möjligt att kunna ladda
> dem genom att ange direktlänk.

Men den valda användaren ska väl kunna ladda dem genom att ange direktlänk?

I så fall är det ju inga problem. Du gör som Micke N tidigare beskrivit med LoadImage.aspx och lägger bilderna utanför wwwroot. Sen blir ju villkoret för att visa bilden att den inloggade användaren har fått den tilldelad sig, vilket du lämpligen håller reda på i en databas.

Hehe.. förlåt, jag är värdelös på specifikationer. En annan faktor i det hela är att jag använder en inköpt modul som har begränsningar i uppladdning av bilderna. Bilderna måste med andra ord ligga "internt".

Men jag skrev en httpHandler, och drar igenom alla .jpg bilder genom den. Fungerar fint nu. En bonus man får genom denna lösningen är att man skyddar även bilderna från länkning på ett snyggt sätt. Bilden blir inte bara spärrad, utan man kan byta ut dem mot en annan bild som säger t.ex. "Besök bla bla för korrekt bild", om det nu är något man vill.

Tackar alla för hjälpen!

Vart har du lagt httphandlern? Jag gjorde en url rewritefunktion en gång och lade den i Application_BeginRequest i global.asax.vb men problemet jag hade var att (nästan) endast aspx-filer skickades in i .net-"motorn", resten går som vanliga filanrop på sidan om. Så jag antar att du inte tar hand om anrop till filer med extensionen .jpg i din httphandler.... eller vilket trick kör du med? :)

Fluffe 2005-06-16 15:33

Citat:

Ursprungligen postat av Robert
Citat:

Originally posted by -Fluffe@Jun 16 2005, 14:00
Citat:

Ursprungligen postat av tydal
> Och bilderna som administratören tilldelar användarna ska enbart kunna
> ses av den valda användaren. Ska därför inte vara möjligt att kunna ladda
> dem genom att ange direktlänk.

Men den valda användaren ska väl kunna ladda dem genom att ange direktlänk?

I så fall är det ju inga problem. Du gör som Micke N tidigare beskrivit med LoadImage.aspx och lägger bilderna utanför wwwroot. Sen blir ju villkoret för att visa bilden att den inloggade användaren har fått den tilldelad sig, vilket du lämpligen håller reda på i en databas.

Hehe.. förlåt, jag är värdelös på specifikationer. En annan faktor i det hela är att jag använder en inköpt modul som har begränsningar i uppladdning av bilderna. Bilderna måste med andra ord ligga "internt".

Men jag skrev en httpHandler, och drar igenom alla .jpg bilder genom den. Fungerar fint nu. En bonus man får genom denna lösningen är att man skyddar även bilderna från länkning på ett snyggt sätt. Bilden blir inte bara spärrad, utan man kan byta ut dem mot en annan bild som säger t.ex. "Besök bla bla för korrekt bild", om det nu är något man vill.

Tackar alla för hjälpen!


Vart har du lagt httphandlern? Jag gjorde en url rewritefunktion en gång och lade den i Application_BeginRequest i global.asax.vb men problemet jag hade var att (nästan) endast aspx-filer skickades in i .net-"motorn", resten går som vanliga filanrop på sidan om. Så jag antar att du inte tar hand om anrop till filer med extensionen .jpg i din httphandler.... eller vilket trick kör du med? :)

Finns en jättesmidig funktion i web.config som gör det superenkelt att lägga till egna handlers, bara att lägga till:

<add verb="GET" path="*.jpg" type="JpgHandler, MyDll"/>

I typ anger man bara namnet på/sökvägen till klassen, och namnet på dll:en.
"Tricket" ligger sedan i att låta .jpg filer passera asp.net i IIS:en som någon nämnde i ett inlägg här tidigare.

Hehe, helt ärligt vet jag inte hur säkert det är. Kanske någon som har synpunkter?


Alla tider är GMT +2. Klockan är nu 21:13.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson