14. juni 2008 - 21:27
Der er
6 kommentarer og
1 løsning
beskytte pdf-filer
Hej
Jeg har nogle foreningsblade liggende i pdf-format, i en selvstændig mappe. Hvordan sikre jeg mig at filerne ikke indlæses hvis man kender den fulde sti? Jeg har lavet et medlems-område, som er brugerbeskyttet med password. Det virker fint, hvor der er tale om *.asp filer
venlig hilsen
Overisen
<html>
<%
'Åbner connection til databasen
'-----------------------------------------------------------------------------------
Set conn = Server.CreateObject("ADODB.connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db.mdb")
'Setup
'-----------------------------------------------------------------------------------
Set setup = Server.CreateObject("ADODB.RecordSet")
strSQL = "select * from tabel where cellle"
setup.Open strSQL, conn, 1, 3
%>
<head>
<title>Download Center</title>
</head>
<body>
<table width="100%" height="100%"><tr><td align="center">
<%
On Error Resume Next ' Gå ikke ned ved fejl (f.eks. hvis filen ikke eksisterer)
DoLogin = (Request.Form("username") <> "") ' Er brugeren ved at logge ind?
If DoLogin Then ' Ja?
Session("LoginUsername") = LCase(Request.Form("username")) ' Gem brugernavn
Session("LoginPassword") = Request.Form("password") ' og adgangskode i session-variabler
' Reload siden: - for at undgå at man møder boksen 'Vil du sende (post)informationen igen?'
Response.Redirect Request.ServerVariables("SCRIPT_NAME") & "?" & _
Request.ServerVariables("QUERY_STRING")
End If
UserName = Session("brugernavn") ' Hent brugernavn
Password = Session("brugerkode") ' og adgangskode i session-variabler
' Tjek brugernavn og adgangskode: (kan tjekke vilkårligt mange brugere, hvis man ønsker det)
if Session("brugernavn") <> "" AND Session("brugerkode") <> "" then
Set rs = conn.Execute("select * from bruger where brugernavn = '" & Session("brugernavn") & "'")
'Tjecker om brugeren eksisterer
if rs.EOF or rs.BOF then
response.write ("Du har ikke adgang til denne fil.")
else
'tjecker om passwordsne matcher hinanden
if rs("brugerkode") = Session("brugerkode") then
' Brugeren er nu logget ind!
' Evt. kan brugeren logges ud med det samme igen, vha. følgende to linier:
' I så fald får han kun lov til at downloade én fil ad gangen før login igen.
'
'Session("LoginUsername") = Empty
'Session("LoginPassword") = Empty
'
'
' *** Send fil til klienten ***
' af: Bjarke Walling Petersen <bwp@bwp.dk>
'
On Error Resume Next ' Gå ikke ned ved fejl (f.eks. hvis filen ikke eksisterer)
' Find fil-stien ud fra filnavnet angivet i QueryStringen: ?file=xxxx
' Både \ og / fjernes fra filnavnet for at sikre at man ikke kan gå ind i andre mapper.
' Filerne skal selvfølgelig være placeret et sted, så webserveren ikke kan sende dem.
' Dette ville spolere hele idéen. Her er de placeret i C:\Filer\. Har man ikke egen
' server, men et webhotel, har man normalt adgang til den mappe som webmappen ligger i.
' Her kan filerne også placeres. Stien på denne mappe fås med:
' FilePath = Left(Server.MapPath("/"), InStrRev(Server.MapPath("/"), "\")) & FileName
FileName = Replace(Replace(Request.QueryString("file"), "/", ""), "\", "")
FilePath = "D:\Domains\wwwroot\" & FileName
Response.Buffer = True ' Vent med at sende output til scriptet er færdigt
Set st = Server.CreateObject("ADODB.Stream") ' Åben Stream-objektet
st.Type = 1 ' Sæt fil-typen til binær
st.Open ' Åben objektet
st.LoadFromFile FilePath ' Åben fil angivet i QyeryStringen: ?file=xxxx
Response.Clear ' Rens output-bufferen
Response.ContentType = "image/gif" ' Sæt fil-typen (MIME-Type). I dette tilfælde en
Response.ContentType = "image/jpeg" ' Sæt fil-typen (MIME-Type). I dette tilfælde en
Response.ContentType = "application/x-msaccess" ' Sæt fil-typen (MIME-Type). I dette tilfælde en
' .gif-fil. Se evt. artiklen 'MIME Content-types i IIS'
' Følgende sætning gør at der fremkommer en download-boks hos brugeren. Hvis man ønsker
' at det f.eks. er et billede, der vises i en HTML-fil, skal man selvfølgelig ikke gøre det.
' Det sætter også det viste filnavn til fil.gif. Prøv evt. at ændre 'attachment' til 'inline'.
Response.AddHeader "content-disposition", "attachment;filename=" & FileName
Response.BinaryWrite st.Read() ' Udskriv filen til brugeren: (I første omgang bufferen)
st.Close ' Luk Stream-objektet
Set st = Nothing ' Ryd op
Response.End ' Afslut scriptet
else
response.write ("Du har ikke adgang til denne fil.")
end if
end if
rs.Close
set rs = nothing
else
response.write ("Du har ikke adgang til denne fil.")
end if
%>
<br>
<h1><%=Request.QueryString("file")%></td></tr></table>
</body>
</html>