Mediawiki允许多种文件类型(格式)文件上传设置

开启Mediawiki上传设置,默认支持的文件格式是: ‘png’, ‘gif’, ‘jpg’, ‘jpeg’ 。

支持多种文件类型上传设置

当上传其他文件格式时会提示(假设.svg格式)

“.svg”是一种不准许的文件类型。容许的多种文件类型有png, gif, jpg, jpeg

找到“includes/DefaultSettings.php”修改

$wgFileExtensions = array( ‘png’, ‘gif’, ‘jpg’, ‘jpeg’ );

$wgFileExtensions = array( ‘png’, ‘gif’, ‘jpg’, ‘jpeg’, ‘svg’ );

保存后就可以上传”.svg”格式的文件了,当然你也可以添加更多其他格式的文件类型,比如我的:

$wgFileExtensions = array( ‘png’, ‘gif’, ‘jpg’, ‘jpeg’ ,’docx’,’rar’,’zip’,’pdf’);

引用下Wikimedia的原文:

Supported file types

By default, MediaWiki only allows you to upload certain types of files (extensions gif, jpg, jpeg, ogg and png). This is managed by the orders in includes/DefaultSettings.php

参考:http://meta.wikimedia.org/wiki/Help:Images_and_other_uploaded_files

取消 MIME类别”application/zip”的文件格式限制

当上传pdf的时候没有问题,但是上传docx或者zip格式的文件时就会提示:

不可以上传这个文件,因为 Internet Explorer 会将它侦测为 “application/zip”,它是一种不容许以及有潜在危险性之文件类型。

同上面找到“includes/DefaultSettings.php”默认配置文件修改 $wgMimeTypeBlacklist的值

$wgMimeTypeBlacklist= array(
# HTML may contain cookie-stealing JavaScript and web bugs
‘text/html’, ‘text/javascript’, ‘text/x-javascript’, ‘application/x-shellscript’,
# PHP scripts may execute arbitrary code on the server
‘application/x-php’, ‘text/x-php’,
# Other types that may be interpreted by some servers
‘text/x-python’, ‘text/x-perl’, ‘text/x-bash’, ‘text/x-sh’, ‘text/x-csh’,
# Client-side hazards on Internet Explorer
‘text/scriptlet’, ‘application/x-msdownload’,
# Windows metafile, client-side vulnerability on some systems
‘application/x-msmetafile’,
# A ZIP file may be a valid Java archive containing an applet which exploits the
# same-origin policy to steal cookies
‘application/zip’, //by baicailin
);

在’application/zip’前面加#号(注释掉这行),然后上传zip文件,通过!

ziptest.zip‎ (文件大小:248 KB,MIME类型:application/zip)
警告:该文件类型可能包含恶意代码。运行它可能对您的系统带来危险。

附注 配置MIME类型(设置):

配置Apache MIME 类型

默认,Apache 通过检查文件的扩展名来决定与每个文件一起发送的媒体类型。扩展名类型映射存储于 httpd/conf 目录(通常是类似 /usr/httpd/conf 或 /etc/httpd/conf 的目录)下的 mime.types 文件中。

配置IIS的MIME类型

多用途 Internet 邮件扩展 (MIME) 类型用于标识可从 Web 服务器向浏览器或邮件客户端提供的内容类型。当浏览器从 Web 服务器中请求内容时,它也会请求该内容的 MIME 类型。在返回内容之前,IIS 会将该 MIME 类型作为 HTTP 头中的 Content_Type 字段返回给浏览器,以便浏览器知道如何处理或显示该内容。

IIS 使用默认的全局 MIME 类型列表确定要提供的内容类型。如果 Web 服务器上未定义客户端请求的 MIME 类型,IIS 将返回 404.3 错误。

由于 IIS6 默认没有添加上一些 MIME ,在下载这些文件时会提示找不到文件,所以要手动添加上去,而且还要在IIS中,进入网站的属性,把主目录里面的执行权限设置成纯脚本。

参考:http://technet.microsoft.com/zh-cn/library/cc753281%28WS.10%29.aspx

升级到 MediaWiki 1.15.1

从MediaWiki 1.12.0 直接升过来的,按照升级说明,一路很顺利,用的最后一种办法,重新安装来升级的。

升级前准备,备份数据库,备份配置文件 LocalSettings.old.php 为LocalSettings.old.php ,修改好模板文件(若你先前修改过的话),删除多余的语言文件(不是必须的)。

安装的时候的数据库和原配置一样,不记得的可以打开 LocalSettings.old.php 看看。
安装成功之后删除新生成的 LocalSettings.php ,然后改 LocalSettings.old.php 为 LocalSettings.php 。

升级完成,测试基本功能是否正常。。

补充:

找到的关闭新用户注册的办法,也发到这里来了

就是在配置文件 LocalSettings.php 中添加以下语句:

#Disallow creating accounts
$wgGroupPermissions[‘*’][‘createaccount’] = false;

关闭游客顶部的IP地址显示(可减轻服务器负载):

$wgShowIPinHeader = false;

关闭游客编辑权限:

$wgGroupPermissions[‘*’][‘edit’] = false;

查看更多关于 Mediawiki LocalSettings配置变量索引 :http://clin003.com/wiki/index-of-all-supported-configuration-options-based-on-the-localsettings-file-1489/

HDWiki4.0.5标签Tags过滤危险网页代码修复办法

环境:HDWiki4.0.5
描述:标签中的内容在被服务端“处理”时候没有被严格过滤(有一层关键字过滤),不过内容在发送到服务器前被客户端的js处理过,原版编辑器模板并没有正常使用上的问题。

前几天为HDWiki换个编辑器问题就出来了,由于偶的编辑器页面没有js处理,导致发送到服务器的Tags中的网页标签代码也被存储啦,然后查看词条页面的时候,就看到发送的网页代码效果了。

修复办法:打开control目录下的doc.php,找到
大概在178和315行

$doc[‘tags’]=$_ENV[‘doc’]->replace_danger_word($doc[‘tags’]);

修改为

$doc[‘tags’]=strip_tags($_ENV[‘doc’]->replace_danger_word($doc[‘tags’]));

即可。
同时建议把标题Title也进行同样的“过滤”(不过代码在Title里是没有太大危险性的,因为Title已经在服务端进行了转换处理)!

最后感谢“风吹过的夏天”同学的问题纠结和热心帮助。。

附注:PHP strip_tags函数说明
strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。

strip_tags(string,allow)
参数 描述
string 必需。规定要检查的字符串。
allow 可选。规定允许的标签。这些标签不会被删除。

注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。

参考:PHP strip_tags() 函数

为Hdwiki4.0.5换个HTML编辑器!

昨天在hdwiki论坛看到有童鞋挖出hdwiki曾经使用过kindeditor编辑器,并且为hdwiki4.0.5成功更换强大的编辑器!可以来测试。。

模仿一下,我也在本地测试了下,还行 🙂 。

编辑页面模板是仿着词条页面模板来写的。

测试运行版本

hdwiki版本:4.0.5

kindeditor版本:3.3.1

editor.htm模板中嵌入编辑器的说明

<textarea id=”content” name=”content” style=”width:800px;height:300px;visibility:hidden;”>{$doc[‘content’]}</textarea>

<script type=”text/javascript” charset=”utf-8″ src=”js/kindeditor/kindeditor.js”></script>

<script type=”text/javascript”>KE.show({id : ‘content’});</script>

这里配置文件单独写在一个js中来完成配置

<script type=”text/javascript” src=”js/kindeditor/keconfig.js”></script>

在kindeditor.js中添加“目录按钮”和“内链按钮”的插件(plugin)

关于插件的添加可以查看官方的说明文档

首先在kindeditor.js的以下位置

KE.lang = {

添加按钮对应的说明文字

innerlink : “内部链接”,

section : “目录”

然后在最后添加按钮对应的代码:

KE.plugin[‘section’] = {

click : function(id) {

KE.util.select(id);

KE.util.selection(id);

if (KE.browser == ‘IE’) {

var text=KE.g[id].range.text;

} else {

var text=KE.g[id].range.toString();

}

KE.util.insertHtml(id, ‘<div >’+text+'</div>’);

KE.util.focus(id);

}

};

KE.plugin[‘innerlink’] = {

click : function(id) {

KE.util.selection(id);

if (KE.browser == ‘IE’) {

var value=KE.g[id].range.text;

} else {

var value=KE.g[id].range.toString();

}

KE.util.insertHtml(id, ‘<a title=”‘+value+'” href=”index.php?doc-innerlink-‘+encodeURI(value)+'”>’+value+'</a>’);

KE.util.focus(id);

}

};

为“插件”添加图标和定义内链在编辑器中的样式

.hdwiki_tmml {

float: left;

height: 14px;

font-size: 18px;

color: #333333;

font-weight: bold;

padding: 4px;

width: 95%;

margin-left: 5px;

border-bottom-width: 1px;

border-bottom-style: solid;

border-bottom-color: #BFBFBF;

}

.ke-icon-innerlink {

background-image: url(button_link.png);

width: 23px;

height: 20px;

}

.ke-icon-section{

background-image: url(button_headline.png);

width: 23px;

height: 20px;

}

修改好的已经打包可下载使用

下载地址(可自行补全):/sa/kindeditor_for_hdwiki405.zip

Google code地址:http://luoyanglife.googlecode.com/files/kindeditor_for_hdwiki405_full.1.0.zip

补丁包说明

1、首先到kindeditor官方网站下载原版编辑器压缩包。http://www.kindsoft.net/down.php

2、解压原版编辑器(我下的是kindeditor-3.3.1)。

3、复制一份编辑器文件到网站js目录下比如(js\kindeditor)。

4、测试是否正确放置编辑器文件(http://hdwiki域名/js/kindeditor/examples/),测试完之后可以把examples目录删掉。

5、解压针对hdwiki4.0.5版本修改的补丁包。

6、可直接覆盖,也可以一个个覆盖

7、添加自己的广告到editor.htm中的右侧空区

补丁包对应的文件列表:

├─js

│  └─kindeditor

│      │  keconfig.js

│      │  kindeditor.js

│      │

│      └─skins

│              button_headline.png

│              button_link.png

│              default.css

└─view

└─default

editor.htm

editor.htm为重新编写的hdwiki4.05编辑器模板

keconfig.js为HTML编辑器kindeditor的自定义配置文件

button_headline.png和button_link.png分别为目录图标和内链图标(取自Mediawiki)

default.css为修改过的样式

default.css与kindeditor.js中修改过的地方都用注释做过标记/*add by clin003 */

补充:按照类似的办法可成功更换为ckeditor_3.0编辑器,内链按钮和目录还未测试。

20091008更新补充2:今天对keconfig.js配置文件中加入设置开启过滤功能同时可以选择保留的HTML标记和属性,也就是两个属性参数:

filterMode:’true’,

htmlTags : {
font : [‘color’, ‘size’, ‘face’, ‘.background-color’],
span : [
‘.color’, ‘.background-color’, ‘.font-size’, ‘.font-family’,
‘.font-weight’, ‘.font-style’, ‘.text-decoration’, ‘.vertical-align’
],
div : [
‘class’, ‘align’, ‘.border’, ‘.margin’, ‘.padding’, ‘.text-align’, ‘.color’,
‘.background-color’, ‘.font-size’, ‘.font-family’, ‘.font-weight’,
‘.font-style’, ‘.text-decoration’, ‘.vertical-align’, ‘.margin-left’
],
table: [
‘class’, ‘border’, ‘cellspacing’, ‘cellpadding’, ‘width’, ‘height’, ‘align’,
‘.padding’, ‘.margin’, ‘.border’, ‘bgcolor’, ‘.text-align’, ‘.color’, ‘.background-color’,
‘.font-size’, ‘.font-family’, ‘.font-weight’, ‘.font-style’, ‘.text-decoration’
],
‘td,th’: [
‘class’, ‘align’, ‘valign’, ‘width’, ‘height’, ‘colspan’, ‘rowspan’, ‘bgcolor’,
‘.text-align’, ‘.color’, ‘.background-color’, ‘.font-size’, ‘.font-family’, ‘.font-weight’,
‘.font-style’, ‘.text-decoration’, ‘.vertical-align’
],
a : [‘class’, ‘href’, ‘target’, ‘name’],
embed : [‘src’, ‘width’, ‘height’, ‘type’, ‘loop’, ‘autostart’, ‘quality’, ‘.width’, ‘.height’, ‘align’, ‘allownetworking’, ‘/’],
img : [‘src’, ‘width’, ‘height’, ‘border’, ‘alt’, ‘title’, ‘.width’, ‘.height’, ‘/’],
hr : [‘class’, ‘/’],
br : [‘/’],
‘p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6’ : [
‘align’, ‘.text-align’, ‘.color’, ‘.background-color’, ‘.font-size’, ‘.font-family’,
‘.font-weight’, ‘.font-style’, ‘.text-decoration’, ‘.vertical-align’, ‘.text-indent’, ‘.margin-left’
],
‘tbody,tr,strong,b,sub,sup,em,i,u,strike’ : []
}

对kindeditor.js中的插入flash默认大小进行调整,同时过滤掉AllowScriptAccess 参数(不设置AllowScriptAccess的值默认为“sameDomain”属于安全设置),插入的时候添加allowNetworking 参数,可以查看详细的 安全引用Flash视频,allownetworking=”internal” 参数的应用 介绍。

另外本地图片的上传路径需要自行在编辑器目录php下的upload.php中进行设置,参考设置办法(按照日期进行保存,可自行修改设置):

//文件保存目录路径
$save_path = ‘./../../../uploads/ke/’ . date(“Ymd”) .’/’;
//文件保存目录URL
$save_url = ‘http://luoyanglife.com/baike/uploads/ke/’.date(“Ymd”) .’/’;

当然这些仅仅在js端做的过滤是可以被绕过去的。。安全的做法是在服务端对接收的数据做过滤。

20091008补充说明:修正IE下在不使用其他按钮的前提下,目录按钮不起作用

对HDWiki网站进行FLASH恶意代码加载与修复办法[HDWiki跨站漏洞]

今天下午在“百科”里发现异常情况:点开一个词条后,刚刚看到内容,就跳转到一个电影网站(要真是个电影网站还好点,可看到的是三个弹出网页,然后就广告广告,连那个最大的很像播放器的东东也是个广告,人渣啊)啦!郁闷的还以为是浏览器出问题啦,后退后退还是不行,看看链接也没有错啊,怀疑是不是域名被劫持啦,于是ping,对啊,换个浏览器打开域名首页,正确!
一个念头就是词条内容有问题,HD一直有个问题就是词条名字太长会被错误的截断,导致网页源码乱码(应该是编码字节处理没搞好),只有IE下会是乱码,一个一个点刚才的词条,有一次跳转发生啦,囧。

实施对HDWIKI百科网站的FLASH挂马欺骗(任何一个人点进词条自动跳转到目标网站)

只好把那个网页用迅雷下回来,看源码,没有太大异常,只有一个,发现”embed”半闭合标签,里边的Swf打开后跳转到目标网站,疑团解开啦,找办法修复。

怎样过滤词条添加过程中的SWF文件?发现使用正常的添加媒体按钮添加的SWF文件并没有任何问题(不会跳转)。

使用源码直接添加写好的SWF嵌入代码:

<embed type=”application/x-shockwave-flash”  src=”http://clin003.com/sa/1.swf” AllowScriptAccess=”always” />

对HDWIKI编辑器进行修复

跳转,囧,看来从编辑器里把插入SWF时附带的代码修改并不会起作用,对过滤语句的标签中添加“embed”,是不起作用的(HDwiki 4.0.3的编辑器),可能我写的有问题。

于是就取个最捷径的办法,把切换到源码模式的按钮事件所使用的函数语句注释掉!!

文件为“js”目录,“editor”文件夹下的“editor.js”(注释掉函数内容暂时解决)
hdwiki4.03的大概在1681行到1698行
hdwiki4.04的大概在965到973行

隐患
虽然从编辑器功能上进行啦防范,但仍然有可能利用(因为这段代码没有被过滤,可以直接发送制作好的数据包进行POST)

附注:
swf的跳转动作代码很简单

if(1){geturl(“http://clin003.com/”,”_self”);}

只要这样就可以啦,测试页面:http://clin003.com/sa/index.html (建议保存到不同的域名下试试效果)。

HdWiki跨站漏洞暂时修复办法[20090505]

目前只是发现搜索框,词条名称那里提交的内容没有被过滤,可导致跨站攻击,只是这样的攻击一般都比较容易发现,不是大站或者安全类的站的话,影响不是很大。
不过还是写下暂时修复办法:
打开“/control/search.php”
对提交的内容进行转义(HDwiki群Terry提供)

$searchtext=stripslashes($element['searchtype']==
"tag"?"TAG:".stripslashes($element['keyword']):
stripslashes($element['keyword']));
$this->view->assign('categorylist',$categorylist);
$this->view->assign("searchtext",htmlspecialchars($searchtext));
$this->view->assign("list",$list);
$this->view->assign('navtitle',$this->view->lang['search'].'-'.string::substring(htmlspecialchars((($element['keyword']))),0,20));

同样在doc.php中

$title=string::substring(string::stripscript($_ENV['doc']->
htmlspecialchars(replace_danger_word(trim($this->post['title'])))),0,80);

另外发现在默认输入“词条名”选择进入词条时,的title变量只是经过简单的去掉头尾空格,然后就给sql语句使用啦,只是HDwiki在使用的时候做啦特殊”调用“(下午去杀毒啦,到现在还没坐下来仔细研究..)

$title=trim($this->post['searchtext']);
...
$sql="select d.did,d.tag,d.title,d.author,d.authorid,d.time,d.summary from wiki_doc d where d.title LIKE '%$title%' order by d.time desc";