forked from extern/egroupware
mitigate risk of serving javascript or css via webdav from our domain
This commit is contained in:
parent
5a6221ee63
commit
a9ff59e452
@ -668,6 +668,29 @@ class vfs_webdav_server extends HTTP_WebDAV_Server_Filesystem
|
|||||||
}
|
}
|
||||||
if (($ok = parent::GET($options)))
|
if (($ok = parent::GET($options)))
|
||||||
{
|
{
|
||||||
|
// mitigate risk of serving javascript or css via webdav from our domain,
|
||||||
|
// which will get around same origin policy and CSP
|
||||||
|
list($type, $subtype) = explode('/', strtolower($options['mimetype']));
|
||||||
|
if (!$this->force_download && in_array($type, array('application', 'text')) &&
|
||||||
|
in_array($subtype, array('javascript', 'x-javascript', 'ecmascript', 'jscript', 'vbscript', 'css')))
|
||||||
|
{
|
||||||
|
// unfortunatly only Chrome and IE >= 8 allow to switch content-sniffing off with X-Content-Type-Options: nosniff
|
||||||
|
if (html::$user_agent == 'chrome' || html::$user_agent == 'msie' && html::$ua_version >= 8)
|
||||||
|
{
|
||||||
|
$options['mimetype'] = 'text/plain';
|
||||||
|
header('X-Content-Type-Options: nosniff'); // stop IE & Chrome from content-type sniffing
|
||||||
|
}
|
||||||
|
// for the rest we change mime-type to text/html and let code below handle it safely
|
||||||
|
// this stops Safari and Firefox from using it as src attribute in a script tag
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$options['mimetype'] = 'text/html';
|
||||||
|
$options['data'] = '<pre>'.fread($options['stream'], $options['length']);
|
||||||
|
fclose($options['stream']);
|
||||||
|
unset($options['stream']);
|
||||||
|
$options['size'] += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
// mitigate risk of html downloads by using CSP or force download for IE
|
// mitigate risk of html downloads by using CSP or force download for IE
|
||||||
if (!$this->force_download && in_array($options['mimetype'], array('text/html', 'application/xhtml+xml')))
|
if (!$this->force_download && in_array($options['mimetype'], array('text/html', 'application/xhtml+xml')))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user