Re: protecting internal redirects

"Michael A. Capone" <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
Rather than doing the URL redirect, why not just keep the cached results 
in a private directory, and let the CGI open them and serve them up 
directly?  This would be the most secure way.

So, you could do something like this:

################################################################################
print "Content-type: text/html\n\n"; # or whatever the appropriate 
content-type is

$cached_file_name = FigureOutRequest();  # find out if the result is 
already cached in a file

if ($cached_file_name != "")
{
   open CACHEFILE, "/path/to/$cached_file_name";
   print STDOUT <CACHEFILE>;  # send output to browser
   close CACHEFILE;
}
else
{
    $generated_result = DoAllTheWork();
    $new_cache_file = "appropriate_name.txt";    # save the generated 
result into the cache...
    open CACHEOUT, "> /path/to/$new_cache_file";
    print CACHEOUT $generated_result;
    close CACHEOUT;

    print STDOUT $generated_result;              # ... and then send it 
back to the browser.
}

Would that get the job done?

E R wrote:
> Hi all,
>
> This is not exactly a mod_perl question - in fact I hope there is a
> solution which does not use mod_perl.
>
> I have a CGI script which generates a lot of output. Because it takes
> a lot of time to the output, the results are cached in case the same
> request is made again.
>
> To serve the file the CGI script issues an internal redirect to a url
> which points to the cached results.
>
> My question is: can the url which points to the cached results be
> protected so that it cannot be directly accessed by external clients?
>
> For example:
>
> 1. user makes a request
> 2. CGI script handles request. It computes a file name for the
> results, generates the results and places the result in that file.
> 3. The CGI script then emits an internal redirect to a url which will
> map to the file name determined in step 2.
> 4. Apache will process the internal redirect and serve the contents of
> the file to the client.
>
> I want to prevent the clients from accessing the file directly by
> figuring out what the url is in step 3.
> I know that clients will not see the internal redirect, but I also
> want to prevent them from guessing it.
>
> Is there an Apache configuration I can use to accomplish this, or do I
> need to use mod_perl?
>
> Thanks,
> ER
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.