Avatar billede mini41 Nybegynder
28. oktober 2005 - 16:17 Der er 13 kommentarer og
1 løsning

Link der blever kopieret.

Jeg har en side med nogle billeder, som andre kopierer og indsætter på deres side.
Jeg er sådanset ligeglad med de kopierer billederne men de linker direkte til mine billeder, hvilket bruger min båndbredde.

Har jeg nogle muligher for at undgå dette feks. så man ikke kan hente mine billeder fra en anden side?

NB: Jeg hoster selv mine filer på en 2003 server.
Avatar billede softspot Forsker
29. oktober 2005 - 01:35 #1
Jeg ved godt det er et lamt forslag (men jeg har ikke bedre), men du kan lægge en side ind imellem billedet "internettet" som checker om forspørgslen kommer fra din eget domæne eller om den kommer udefra. Hvis den kommer udefra, så kan du bare smide en fejlside og ellers streamer du bare billedet ud til klienten. Du kan evt. benytte Request.ServerVariables("HTTP_REFERER") til at kontrollere hvilket domæne kaldet kommer fra. Dette har dog en omkostning hvad serverresurser angår, da webserveren skal arbejde med at læse og streame billederne hver gang de skal bruges, men det giver dig da en mulighed for at styre brugen af dem lidt bedre...
Avatar billede softspot Forsker
29. oktober 2005 - 01:37 #2
Med denne metode kan du i øvrigt også placere billederne et helt andet sted end på webserveren - hvis du skulle få lyst til det :)
Avatar billede mini41 Nybegynder
07. november 2005 - 18:08 #3
Jeg er ikke helt med på hvad du mener med "ind imellem billedet "internettet" "
Avatar billede mini41 Nybegynder
07. november 2005 - 18:08 #4
Kan du evt. give et eksempel
Avatar billede softspot Forsker
07. november 2005 - 18:23 #5
Der manglede lige et lille "og" mellem "billedet" og "internettet" - sorry...

Det jeg tænker på, er at du kan placere dine billedefiler i en "hemmelig" folder - i princippet endda udenfor roden af websitet, så de ikke kan refereres igennem browseren. Når din side skal bruge et billede, indsætter du så en reference til en side som henter billedet (f.eks. på grundlag af et id) og sender det til browseren.

Denne side kan samtidig fungere som "filter" for forspørgsler som ikke kommer fra dit eget domæne og i disse tilfælde blot returnere en fejlside eller noget i den stil...

Eksempel på brugen af sådan en side:

<img src="visbillede.asp?id=10023">


siden visbillede.asp indeholder så et check á la:

if instr(request.servervariables("HTTP_REFERER"), "www.ditdomæne.dk") > 0 then
  ' så kan du begynde streaming af billedet
  ' TODO: åben, læs og stream billede via response.binarywrite
else
  ' så er det et uautoriseret kald til din side
  ' og du kan sende noget fejldata af en slags
  ' eller bare returnerer en tom side... det er billigst :)
end if

billederne kunne så placeres i en folder udenfor dit website. Lad os antage at din webserver har flg. folderstruktur (hvor www er roden af dit website):

d:\inetpub\www\
d:\inetpub\billeder\
d:\inetpub\database\

dine billeder skal altså hentes fra folderen d:\inetpub\billeder og sendes til brugerens browser via response.binarywrite (som nævnt tidligere).
Avatar billede mini41 Nybegynder
07. november 2005 - 19:33 #6
:) det er sgu da egentlig meget smart.
Selvfølgelig bliver det lidt tungt at arbejde med, men ideen er god.

Jeg har forsøgt om der var en mulighed på serveren der kunne gøre noget smart, men det tyder det ikke på
Avatar billede softspot Forsker
07. november 2005 - 19:39 #7
Hvilken webteknologi benytter du på serveren (ASP, ASP.NET, PHP...)?
Avatar billede mini41 Nybegynder
08. november 2005 - 07:06 #8
Jeg benytter ASP
Avatar billede softspot Forsker
08. november 2005 - 11:32 #9
Hvis du har en side der f.eks. hedder stream.asp, som indeholder noget kode i stil med nedenstående, så kan du kalde den for at få streamet en fil ud til browseren.

<%@ language="vbscript" %>
<%
Const adTypeBinary = 1
' DUMMY FILNAVN - SKAL NATURLIGVIS UDSKIFTES MED ET OPSLAG ET ELLER ANDET STED
' SOM KAN GIVE ET FILNAVN SOM ER RELEVANT FOR DIN APPLIKATION
docname = "myimage.jpg"
filename = server.mappath(docname)

' OPSÆT STREAMING AF DATA (SOM ALTSÅ OGSÅ KAN VÆRE ANDRE DOKUMENTTYPER)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile filename
arrFilename = split(filename,".")
Select Case lcase(arrFilename(ubound(arrFilename)))
    Case "asf"
        ContentType = "video/x-ms-asf"
    Case "avi"
        ContentType = "video/avi"
    Case "doc"
        ContentType = "application/msword"
    Case "zip"
        ContentType = "application/zip"
    Case "xls"
        ContentType = "application/vnd.ms-excel"
    Case "gif"
        ContentType = "image/gif"
    Case "jpg", "jpeg"
        ContentType = "image/jpeg"
    Case "wav"
        ContentType = "audio/wav"
    Case "mp3"
        ContentType = "audio/mpeg3"
    Case "mpg", "mpeg"
        ContentType = "video/mpeg"
    Case "rtf"
        ContentType = "application/rtf"
    Case "htm", "html"
        ContentType = "text/html"
    Case "asp"
        ContentType = "text/asp"
    Case Else
        'Handle All Other Files
        ContentType = "application/octet-stream"
End Select
Response.AddHeader "Content-Type", ContentType & "; charset=windows-1252"
Response.AddHeader "content-disposition", "filename=" & docname
 
Response.BinaryWrite objStream.Read
%>


Siden som benytter sig af denne streaming, kan f.eks. se således ud:

<%@ language="vbscript" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>default</title>
  </head>
  <body>
   
    <form id="Form1" method="post">
      <a href="stream.asp">Hent dokument</a><br>
      <img src="stream.asp">
    </form>
   
  </body>
</html>
Avatar billede mini41 Nybegynder
09. november 2005 - 18:32 #10
Kan det ikke lade sig gøre at sikre hele mappen?
Mappen "images" indeholder 9400 billeder og det ville være et mareridt, hvis jeg skulle lave navnene om.
Avatar billede softspot Forsker
09. november 2005 - 18:56 #11
Jo, du kan vel bare sende filnavnet med over som parameter til stream.asp og så læse det angivne filnavn fra den folder som du gerne vil beskytte...

Det skal du bare implementere i stedet for disse linier:

' DUMMY FILNAVN - SKAL NATURLIGVIS UDSKIFTES MED ET OPSLAG ET ELLER ANDET STED
' SOM KAN GIVE ET FILNAVN SOM ER RELEVANT FOR DIN APPLIKATION
docname = "myimage.jpg"
filename = server.mappath(docname)


F.eks. således:

strFile2Get = Request.QueryString("fn") & ""

if strFile2Get <> "" then
  ' alt det kode som sætter header osv. op og sender filen...
end if


Så kunne stream.asp kaldes således:

<img src="stream.asp?fn=billede01.jpg">
<img src="stream.asp?fn=billede02.jpg">
<img src="stream.asp?fn=billede03.jpg">
Avatar billede mini41 Nybegynder
28. januar 2006 - 23:14 #12
softspot, svar for point og tak for hjælpen
Avatar billede mini41 Nybegynder
06. november 2006 - 20:25 #13
Ingen svar så jeg lukker dette spørgsmål.
Avatar billede softspot Forsker
06. november 2006 - 23:23 #14
Sorry, den må jeg have misset :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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