Avatar billede ossian Nybegynder
14. juni 2006 - 21:48 Der er 17 kommentarer og
2 løsninger

Hvordan undgår jeg hotlinking?

Hejsa,

Jeg er ved at lave en billede upload side ala imagevenue.com.

Jeg har mine thumbs i en mappe kaldet /thumbs og mine store billeder i en mappe kaldet /files.

Det jeg ønsker at at filer i mappen /files ikke skal kunne tilgås direkte i browseren, eller kaldes via en anden side. De skal altså kun vises såfremt det er min images.aspx side der kalder dem.

Kan dette lade sig gøre? Og hvordan?

På forhånd tak for hjælpen :-)
Avatar billede old-faithful Praktikant
14. juni 2006 - 22:58 #1
Det kan gøres ved at kræve en bestemt referrer. Nu spørger du godt nok til ASP, men du kan i hvert fald gøre det med en .htaccess fil. Se f.eks. http://www.freeimagebrowser.com/forum/post8257.html
Avatar billede ossian Nybegynder
14. juni 2006 - 23:10 #2
Hejsa,

Tak for dit svar - Jeg kender godt til .htaccess, men det virker ikke på Windows desværre.
Avatar billede old-faithful Praktikant
14. juni 2006 - 23:28 #3
Har du prøvet de løsninger ang. htaccess som kan læses her?: http://www.ozoneasylum.com/5523 (følg de orange links)
Avatar billede ossian Nybegynder
14. juni 2006 - 23:50 #4
Så vidt jeg kan se kræver det at jeg installerer Apache på min Windows server, og det er jeg ikke så interesseret i :-)

Det burde kunne lade sig gøre med en web.config fil..
Avatar billede dj_uncas Nybegynder
15. juni 2006 - 01:25 #5
Hvis du kun giver læse-adgang til ASPNET brugeren på serveren kan du hente billederne med et link som image.aspx?name=billede.gif - i stedet for direkte links.

Så kan du i din image.aspx side, kun give adgang hvis det er den rigtige referer der spørger. Referer kan du få via Request.UrlReferer ...
Avatar billede dr_chaos Nybegynder
15. juni 2006 - 08:05 #6
Jeg tror at dj_uncas's løsning er den bedste for dig.
Du laver en side som streamer billederne/billedet ud til brugeren.
Du kan lægge billederne i en mappe uden for IIS.
Du kan ikke gennem IIS benytte web.config til at forhindre brugerne i at kalde et bestemt billede.
Du kan ligge billederne i en mappe hvor kun din asp.net app får adgang til.
Avatar billede thrytter Nybegynder
15. juni 2006 - 08:29 #7
Tror det kan løses med HttpModule og HttpHandler - kræver dog at du har adgang til at ændre indstillinger på webserveren.
Avatar billede ossian Nybegynder
15. juni 2006 - 09:49 #8
thrytter> Det har jeg, det er min egen dedikerede server. Kan du komme med et kort eksempel på hvordan jeg skal bære mig ad?

Tak for hjælpen :-)
Avatar billede ossian Nybegynder
15. juni 2006 - 10:14 #9
Omkring streaming af billedet, så er det bestemt en kreativ løsning. Jeg har benyttet den før i forbindelse med Classic ASP, hvor der blev sat en session på images.asp og billedet blev så kun streamet via imagestream.asp såfremt sessionen var sat.

Problemet er bare at det er for ressourcekrævende at skulle streame alle billeder ud :(

Tak for hjælpen under alle omstændigheder...
Avatar billede thrytter Nybegynder
15. juni 2006 - 10:24 #10
Jeg har desværre ikke noget eksempel ved hånden - ser om jeg kan finde et senere.
Avatar billede ossian Nybegynder
15. juni 2006 - 11:08 #11
Tak :-)
Avatar billede snepnet Nybegynder
15. juni 2006 - 14:10 #12
Det er ikke så slemt:

Lav en handler - noget i denne stil f.eks.:
<%@ WebHandler Language="C#" Class="ImageServer" %>

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public class ImageServer : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string imageId = context.Request.QueryString["imageId"] != null ? context.Request.QueryString["imageId"] : "0";       
        string imageFolderPath = context.Server.MapPath("~/Images");
        string imagePath = Path.Combine(imageFolderPath, GetImageFile(imageId));
        using(Image img = Image.FromFile( imagePath ))
        {
            context.Response.ContentType = "image/jpeg";
            img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
        }       
    }

    protected string GetImageFile(string imageId)
    {
        // her skal der jo nok ske noget klog iht. id'et, men for nu:
        return "tuba.jpg";
    }

    public bool IsReusable
    {
        get { return true; }
    }   
}

Skriv i din konfigurationsfil, at billeder ikke skal serveres til brugeren ved at assciere med en eksisterende (og afvisende) handler:
<?xml version="1.0"?>
<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
    <httpHandlers >
      <add path="*.jpg" verb="*" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
        <compilation debug="true"/>
        <authentication mode="Windows"/>
    </system.web>
</configuration>

Og sæt et par billeder på en form så du kan se forskellen:

Billede 1 - direkte link<br />
<asp:Image ID="imgImage" runat="server" ImageUrl="~/Images/tuba.jpg" />
<br />
<br />
Billede 2 - via imageserver<br />
<asp:Image ID="imgImage2" runat="server" ImageUrl="ImageServer.ashx?imageId=blah" />

Mvh
Avatar billede thrytter Nybegynder
15. juni 2006 - 22:28 #13
Vil mene, at billedet kan vises ved direkte kald - eks. www.somedomain.images/tuba.jpg medmindre der ændres i IIS'en så kald til .jpg filer håndteres af .net
Avatar billede thrytter Nybegynder
15. juni 2006 - 22:33 #14
snepnet>> forøvrig et godt eksempel, vidste ikke at man kunne lave en handler så nemt - har kun lavet custom HTTP handlere.
Avatar billede ossian Nybegynder
16. juni 2006 - 23:19 #15
snepnet> Genialt - tusinde tak for hjælpen, det gik jo smertefrit :-)

Smid et svar..
Avatar billede snepnet Nybegynder
17. juni 2006 - 00:11 #16
Kommer her :o) - og jeg deler meget gerne med de andre.
Mvh
Avatar billede ossian Nybegynder
17. juni 2006 - 00:28 #17
Smid nogle svar, så deler jeg ml. jer :-)
Avatar billede thrytter Nybegynder
17. juni 2006 - 11:18 #18
Smider også lige et svar.
Avatar billede ossian Nybegynder
17. juni 2006 - 19:02 #19
Tak for hjælpen :-)

Der kommer sikkert flere spørgsmål i nærmeste fremtid..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester