On Github pwolanin / drupal-safe-files
Safe(r) User File Uploads /
Peter Wolanin
Scripts being served by a website can access that site as you by using session cookies
This is why XSS is dangerous
<html> <body> <script> alert(document.cookie); </script> </body> </html>
https://soroush.secproject.com/blog/2014/05/even-uploading-a-jpg-file-can-lead-to-cross-domain-data-hijacking-client-side-attack/
A valid file upload like a .jpg can actually be flash content
Embedding with an OBJECT tag another site can enable CSRF and data hijacking
<IfModule mod_headers.c> <FilesMatch "\.(?i:pdf)$"> ForceType application/octet-stream Header set Content-Disposition "attachment" </FilesMatch> </IfModule>
By using a different domain or subdomain you can avoid sending session cookies
For example, gmail attachments are served from https://mail-attachment.googleusercontent.com
Drupal 7 core issue: https://www.drupal.org/node/2522002
/** * Drupal automatically generates a unique session cookie name * for each site based on its full domain name... */ # $cookie_domain = 'example.com';
function mymodule_file_url_alter(&$uri) { if (file_uri_scheme($uri) == 'public') { $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme); $path = $wrapper->getDirectoryPath(); $path .= '/' . file_uri_target($uri); $uri = 'http://downloads.drupal-7.local:8083/' . $path; } }
RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule . - [F]
It's important to configure your site to respond to only the expected domains
See: https://www.drupal.org/node/1992030