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>