![]() |
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? |
Det går om du använder serverskript (asp/php), eftersom de då inkluderas via filsystemet och inte IIS. Därmed går de förbi eventuella åtkomstbegränsningar i IIS.
Det är dock bökigt och inget jag rekommenderar. |
Detta är mycket enkelt att göra. istället för att länka bilden direkt gör du te x
[img]LoadImage.aspx?ImageID=135[/img] Så i filen LoadImage.aspx laddar du bilden från filsystemet. På detta sätt kan du till och med ha bilden utan för WWWROOT och då kan absolut ingen gå direkt på filen. På många Windows servrar ligger ibland en hyfsat bra komponent (Persits AspJpeg) som du kan använda om du vill göra det riktigt enkelt för dig. /M |
Då flyttar du ju bara problemet. Istället för att skriva http://någonsite.se/bilder/test.jpg för att komma åt bilden direkt så skriver du http://någonsite.se/LoadImage.aspx?ImageID=135
För att det inte ska gå att komma åt bilden direkt måste du lägga in en kontroll som kan fastställa att img-taggen ligger på rätt sida. Det är däri det bökiga ligger. |
Men jag kan väl lika gärna berätta hur man gör...
På html-sidan så skapar du ett slumptal för varje bild. Slumptalet sparas på servern, exempelvis i en databas. Därefter anger du slumptalet på bild-länken, exempelvis http://någonsite.se/LoadImage.aspx?I...umptal=4927581 I LoadImage.aspx som plockar fram bilderna så kontrolleras om slumptalet finns sparat. Finns det på servern så visas bilden och slumptalet tas bort. |
Citat:
Har varit inne på denna lösningen, men problemet jag då fick är att firefox inte visar bilderna. Fungerar bra i explorer. Några förslag på hur man får det att fungera även i Firefox? |
Om det inte fungerar är det förmodligen något som är fel. Internet Explorer sväljer tyvärr alldeles för många felaktigheter, så det är ingen bra webbläsare att testa i. Jag skulle gissa på att du inte har satt rätt mimetyp, dvs inte talat om vad det är för sorts fil som kommer. "Content-Type: image/jpeg".
Har du någon länk till en sida där du har lagt upp bilderna på detta vis så kan jag kolla vad det är för fel. |
Nä, kör allt lokalt för tillfället. Hur förbereder jag rätt mimetyp?
|
Du måste skriva "Content-Type: image/jpeg" på headern. Antar att du använder asp och vet inte hur man gör där. Jag har något svagt minne av Response.ContentType = "image/jpeg" men är inte säker.
|
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. |
Citat:
Någon idé? |
Citat:
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 |
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. |
Citat:
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... |
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. |
> 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. |
Citat:
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! |
Citat:
|
Citat:
<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 16:27. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson