Creating a file Manager

I'm creating a file manager for a client with classic asp. All files in the folder should only be accessible upon login. Each user has their own unique login id. It works fine until one day someone google search the file and manage to open the file directly from the google link. Is there anyway for me to prevent anyone who has the exact url link to download the file.
Who is Participating?
sybeConnect With a Mentor Commented:
Put the files out of the www, so they are no directly accessible. For example in (a subdirectory of) the _private directory.

Filedownload is easy in pure ASP, no need for a costly component. See attached code. Create an asp-file "download.asp" which first checks the login of the users. If not logged in, redirect them to the login page. If logged in send the file.

Sub WriteFileToBrowser(ByVal sFilePath, ByVal sContentType, ByVal sDisplayName)
	Dim oStream, bBuffer, iFileSize, iChunk, i

	Response.Buffer = True
    Server.ScriptTimeout = 30000
    iChunk = 64000

	Set oStream = Server.CreateObject("ADODB.Stream")
	oStream.Type = 1
	oStream.LoadFromFile sFilePath
	iFileSize = oStream.Size

	Response.ContentType = sContentType
	Response.AddHeader "Content-Disposition", "filename=" & sDisplayName
    Response.AddHeader "Content-Length", oStream.Size

	For i = 1 To iFileSize \ iChunk
        If Not Response.IsClientConnected Then Exit For
        Response.BinaryWrite oStream.Read(iChunk)

    If iFileSize Mod iChunk > 0 Then
        If Response.IsClientConnected Then
            Response.BinaryWrite oStream.Read(iFileSize Mod iChunk)
        End If
	End If
	Set oStream = Nothing
End Sub

Open in new window

Lee W, MVPTechnology and Business Process AdvisorCommented:
Just a thought... use a session variable to note that a login has been successful.  Then on every page (perhaps with an include) verify that session variable is set appropriately - if not, redirect to a login page.
Scott Fell, EE MVEDeveloper & EE ModeratorCommented:
I think the problem is even if you password protect your page, the actual file can be surfed to.  So one option is to update your robots.txt.  But that does not mean another bot will respect it.  A 2nd option will be to simply lock down the folder and give everybody the same password.  But that is not always easy to manage.  Check out AspUpload   There is a also a download feature where you can place your files in a locked down folder and the com object can access the locked down folder as a user.  

It's not free, but for $200 it is cheaper then trying to recreate it on your own time.  If you are hosted on a shared service, check with your host, many hosts will already have this installed and ready to go.
Scott Fell, EE MVEDeveloper & EE ModeratorCommented:
sybe, I tried your code with the following:
WriteFileToBrowser "D:\inetpub\wwwroot\hidden\myimage.jpg", "image/jpg","renameimage.jpg"
Works great.  I like the ability to change the image name too.   However, if the site is on a shared server, it is possible that you do not have access to a folder outside of the www directory.  If that is the case, it is still possible that the "hidden" directory can be cached by a search engine.  So if there is a way to add to your code a way to impersonate permissions from something other then "everyone" and remove read permissions from "everyone", that would make your solution work for those types of shared servers that cna't access outside the www folder.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.