Mange paranoide webmasters har ofte den udfordring at deres filer bliver linket direkte (deeplinking), hvilket ikke er hensigtsmæssigt, hvis filen f.eks. er en del af en helhed som finansieres af reklamer (så bliver reklamerne ikke vist og webmasteren må spise brødsuppe i stedet for kaviar).

Hvis man sidder med et ASP-baseret site, kan man gøre lidt for at skjule sine filer og holde bedre styr på hvem der henter hvad hvornår og hvorfra. Hvordan alle disse ting kan opfyldes kommer jeg ind på efterhånden, men først vil jeg lige illustrere hvordan man kan skjule beliggenheden af en fil (eksemplet giver i sig selv ikke nogen beskyttelse af selve filen). Eksemplet er en standard HTML-side (kaldet side.htm), som viser et billede og et link til et Excel-dokument.

<!-- side.htm -->
<html>
<head>
<title></title>
</head>
<body>
<img src="/billede.asp?id=temp.jpg"><br>
<a href="/dokument.asp?id=aarsraport.xls">Årsraporten</a>
</body>
</html>

billede.asp kunne se således ud:

<%
Server.Transfer "/billeder/som/er/skjult/" & request.querystring("id")
%>

Som det ses overføres kontrollen direkte til den, i querystring-parameteren id, angivne fil, hvilket bevirker at denne vil udføres eller sendes til klienten (alt efter hvilken type der er tale om). I eksemplet er det en JPG-fil, så den sendes direkte.

Princippet for dokument.asp er nøjagtig det samme som for billede.asp.

"Fedt nok!", tænker du måske, "men hvordan er det nu lige jeg styrer om en klient må få adgang til min fil?".

Tjooh, det kræver nok at du sørger for at validere de brugere som får adgang til filerne, for så har du i det mindste noget at måle deres rettigheder på... eller beslutter dig for en anden metode som passer til dit scenarie.

Lad os for nemheden skyld tage udgangspunkt i at du har et brugerid du kan verificere, inden der gives adgang til et dokument, så kunne det gøres således:

dokument.asp:

<%
if session("brugerid") & "" <> "" then  
  Server.Transfer "/dokumenter/som/ogsaa/er/skjult/" & request.querystring("id")
else
  Server.Transfer "/fejl/ugyldig_dok_ref.asp"
end if
%>

Her kontrolleres det om brugerid i session er udfyldt (det kunne f.eks. betyde at brugeren er logget ind) og hvis det er, så sender vi filen tilbage, ellers viser vi en fejlside som fortæller noget om at dokumentet ikke kan ses med mindre man er logget ind osv. osv.

En anden ting man også får mulighed for med denne metode, er at tilføje headers til den fil man sender tilbage til klienten, dvs. hvis man ønsker at klienten skal vise en Gem-dialog, når filen forsøges hentet, så kan man sætte headers som signalerer dette. Ja, man kan sågar angive et filnavn som skal foreslås, hvis brugeren ønsker at gemme dokumentet lokalt. Disse headers hedder content-type og content-disposition og kunne se således ud:

<%
if session("brugerid") & "" <> "" then
  Response.AddHeader "Content-Type", "application/octet-stream"
  Response.AddHeader "Content-Disposition", "attachment=raport.xls"
  Server.Transfer "/dokumenter/som/ogsaa/er/skjult/" & request.querystring("id")
else
  Server.Transfer "/fejl/ugyldig_dok_ref.asp"
end if
%>

 

 
Sidst opdateret: 10-09-2008 19:02:24
Tilmeld link | Tilføj Link | Tilføj Link | @-begynder
Erklæring om beskyttelse af personlige oplysninger

nope.dk - Danmarks Website Chart