summaryrefslogtreecommitdiff
path: root/inc/media.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2007-02-24 13:44:58 +0100
committerAndreas Gohr <andi@splitbrain.org>2007-02-24 13:44:58 +0100
commit26ceae189b2d0a31062ca1f26577545b78250281 (patch)
treebfab809313d3f19b569f19047c8ad0b71e733f69 /inc/media.php
parent6d88439ada7c841b10a8de3da846f7cc1cf5842a (diff)
downloadrpg-26ceae189b2d0a31062ca1f26577545b78250281.tar.gz
rpg-26ceae189b2d0a31062ca1f26577545b78250281.tar.bz2
Test uploaded files for HTML tags FS#1077
Following the problem with IE's mimetype handling described at http://www.splitbrain.org/blog/2007-02/12-internet_explorer_facilitates_cross_site_scripting this patch adds a new option (on by default) to check the first 256 bytes of uploaded files against a list of a few HTML tags and denies the upload of such a file. In rare occasions this may block harmless and valid files, but that's price we have to pay for Microsoft's stupidity. Users who need HTML uploads should disable this check. (Don't do that on open Wikis!) darcs-hash:20070224124458-7ad00-0ced616d06f563515b36a0a6871b5ba50229c946.gz
Diffstat (limited to 'inc/media.php')
-rw-r--r--inc/media.php19
1 files changed, 16 insertions, 3 deletions
diff --git a/inc/media.php b/inc/media.php
index 052e9a54a..8cf2bba81 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -226,6 +226,9 @@ function media_upload($ns,$auth){
}elseif($ok == -2){
msg($lang['uploadspam'],-1);
return false;
+ }elseif($ok == -3){
+ msg($lang['uploadxss'],-1);
+ return false;
}
// prepare directory
@@ -249,16 +252,27 @@ function media_upload($ns,$auth){
/**
* This function checks if the uploaded content is really what the
- * mimetype says it is. We also do spam checking for text types here
+ * mimetype says it is. We also do spam checking for text types here.
*
* We need to do this stuff because we can not rely on the browser
* to do this check correctly. Yes, IE is broken as usual.
*
* @author Andreas Gohr <andi@splitbrain.org>
- * @link http://weblog.philringnalda.com/2004/04/06/getting-around-ies-mime-type-mangling
+ * @link http://www.splitbrain.org/blog/2007-02/12-internet_explorer_facilitates_cross_site_scripting
* @fixme check all 26 magic IE filetypes here?
*/
function media_contentcheck($file,$mime){
+ global $conf;
+ if($conf['iexssprotect']){
+ $fh = @fopen($file, 'rb');
+ if($fh){
+ $bytes = fread($fh, 256);
+ fclose($fh);
+ if(preg_match('/<(script|a|img|html|body|iframe)[\s>]/i',$bytes)){
+ return -3;
+ }
+ }
+ }
if(substr($mime,0,6) == 'image/'){
$info = @getimagesize($file);
if($mime == 'image/gif' && $info[2] != 1){
@@ -273,7 +287,6 @@ function media_contentcheck($file,$mime){
global $TEXT;
$TEXT = io_readFile($file);
if(checkwordblock()){
- msg('Content seems to be spam',-1);
return -2;
}
}