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?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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.
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


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.