您正在查看: 包含标签 Discuz 下的文章

终极防跨站策略 Content-Security-Policy

听说 Discuz 又爆跨站漏洞了,唉……
不得不让我想起了 Content-Security-Policy 这一大神器

最早接触 Content-Security-Policy 还是在开发 Chrome 扩展程序的时候
Chrome 的安全性众所周知,开发的时候也遇到了各种坑,其中一个就是 Content-Security-Policy,不支持 HTML5 Import 标签就是这货导致的,于是 Polymer 被我搁(鸽)置了

Content-Security-Policy 可以保护网页,要求所引用资源必须来自指定的几个域,也可以要求禁用一些常用的、容易被 XSS 的特性
比如 Chrome Extensions 中就禁用了上下文的 Script 代码,所有 JavaScript 必须来源自 js 文件,不允许直接通过 script 标签运行

针对网络留言版、社区等网站,还允许禁用 html 标签的 onclick、onmouse*** 等在 html 中定义 js 事件,就算有 XSS 漏洞你也无能为力了 = =
PS:其实这样挺好的,当年 Flash 在 ActionScript 2.0 就是这种方式,在 ActionScript 3.0 已经全部换成监听器的设计了,这样看起代码来也清晰多了

如果你对 CSP 有兴趣,这里是一篇在 HTML5Rocks 上的文章,如有需要可供参考

让 Discuz 支持 MariaDB

昨晚把博客和论坛搬回国内了;博客在搬的过程中倒还挺轻松,只是 Discuz 搬迁后出现水土不服,提示

Illegal mix of collations (gbk chinese ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

搜索后大概意思是说数据库编码不对。
我就郁闷了,数据库是 GBK 的,字段是 GBK 的,程序也是 GBK 的,怎么会编码有问题呢?
绕过计划任务进入论坛,发现论坛中文全部乱码了。
难道是我导入数据的时候有问题?于是乎我又重新用 GB2312 导出一份,上传到服务器,依然不行。
反反复复折腾一个小时之后,一个偶然的机会下发现 Discuz 下数据库被设置为 lantin 编码,这和 phpmyadmin 看到的不一样啊!
然后又研究了许久 Discuz 的数据库类,明明有设置为 GBK 的,难道没设置成功?
在程序中加入 DB::query() 设置编码,发现居然可以了,这是什么道理??表示不服
难道用 mysql_query() 就不行么?可是 DB::query() 又是调用 mysql_query() 的啊
偶然调节代码顺序的时候,发现移动到 if($this->version() > '4.1') 外侧竟然执行成功了
尼玛原来你才是罪魁祸首
可是这句话有问题么?输出下

10.0.9-MariaDB

尼玛我瞬间就明白了,这是一个字符串,“4.1”也是一个字符串,字符串比较是逐一比较各字符,先判断 1 < 4,然后得出 10.0.9-MariaDB < 4.1
我 QNMLGB,害我倒腾两个小时……

解决办法:
修改 version 方法,return '9.9.9';

让 Discuz! 帖子列表支持倒序排序

Discuz! 虽然能够在后台修改帖子的排序方式,但却不能选择是倒序还是顺序排序。
为解决这个问题,可采用以下修改办法:
修改文件 source/module/forum/forum_forumdisplay.php,找到 457 行:

$_GET['ascdesc'] = isset($_G['cache']['forums'][$_G['fid']]['ascdesc']) ? $_G['cache']['forums'][$_G['fid']]['ascdesc'] : 'DESC';

在下方加入:

http:// Modified by kookxiang @ 2014-4-8 13:05:07
if($_GET['forceasc']) $_GET['ascdesc'] = 'ASC';
if($_GET['forcedesc']) $_GET['ascdesc'] = 'DESC';
http:// Ending of modification

这样便能通过 URL 参数 forceasc 和 forcedesc 控制排序了

Discuz! 3.0 产品中的CSRF漏洞

漏洞利用:

[img]admin.php?frame=no&action=members&operation=clean&submit=1&uidarray=1&confirmed=yes[/img] (可删除UID1用户)


有一定 discuz 开发基础的人一定对 submitcheck() 这个函数不陌生吧

没错,这个就是 Discuz! 对 CSRF 攻击做的防御函数

这个函数会判断请求中 formhash 的值,避免伪造的访问

今天在编写某款插件的时候偶然将带有 FORMHASH 字样的代码(即“FORMHASH”字符串)扔进了 Chrome 的 console,结果意外打开了插件的提示框,代码本来是这样的:

/* 前略 */
if(submitcheck('submit', true)){
    http:// ........
} else {
    http:// .........
}

按理说 submitcheck 是会判断formhash的,而我给的formhash肯定是错误的

然后我又将 formhash 改为123456,结果依然过了formhash的判断

郁闷了,然后我就去看了 submitcheck 这货的实现方法

submitcheck -> helper_form::submitcheck

找到 source/class/helper/helper_form.php,节选部分代码:

public static function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
        if(!getgpc($var)) {
            return FALSE;
        } else {
            global $_G;
            if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' /* 此处略去 */)) {
                if(checkperm('seccode')) {

你妹!!!!!!!

$allowget 就不管后面了???

formhash 拿去喂腾讯了???

无语,然后搜下,submitcheck($string, 1) 这种用法 discuz 自己也用……

剩下的自己YY吧

最近好忙

现在到了大一第二学期了,说实在的,这个学期的课程的确比上个学期要繁杂了很多

(嗯,看了下面的课程表你应该就明白了)

课程表.png


手头上的挺多插件起了个头又写不下去了……

不是说写不了,只是不知道为什么没有那个兴趣了……

KKBBS也挺少维护的了,

果然还是坚持不了当初开发时候一天几个版本的速率么……

 

说会课程吧,Flash 和 Photoshop 这俩纯粹是打酱油的

记得貌似最早是在小学还是初中的时候就开始玩 Flash 了

(那时候还是 Macromedia 的 Flash MX,红红的图标至今还记得)

Photoshop 更是不难,主要是之前看过 李涛老师 的教程(有需要的同学可以自己去搜索)

至于面向对象的程序设计(Java)嘛,目前还是没压力的,毕竟做过Android开发,基本还是懂的

离散数学好像现在还在讲命题神马东西……高中都学过的说

感觉压力最大的还是高等数学……高数不是人学的啊::>_<::


另外呢,最近跟 流无异 妹纸进了学校的招生办……

怎么说呢,偶尔也参与下社团嘛(学生会这种东西大一纯粹就只能打杂,还是算了)

然后就手贱接下了学校招生网的设计……

本来自己 CSS 设计就不是强项,这回希望能锻炼下吧……

另外做的整站现在也只有 MiOTA 一个,也可以算是一次锻炼的机会吧……

现在遇到的问题主要就是布局了,毕竟第一次做内容量这么大的网站(涉及很多栏目和内容)

看看学校那个还停留在 Web 2.0 Style 的首页,顿时感到压力山大

目前呢基本就相当于重新写 CSS 了,JS部分采用了jQuery(也是我第一次用这货,以前基本是直接写自己JavaScript的)

到我现在写这篇文章的时候,大致模板框架已经写好了(现在是先做好单一页面,然后再弄成动态页面)

接下来呢就是考虑导航的设计,然后等指导老师过目了……


Discuz 方面,最近真心没啥好创意,也不是很想写,打算抽个时间测试下 X3 的兼容性,能兼容的都提交上去吧,不兼容的就算了……如果以后有空写的话也可以重新整下……


MiOTA 方面,MIUI V5给加密了,抓包机无能啊,还得重写……不过根据反编译的代码,目前还没找到解密办法,就先坑着吧,能用就行……只是担心用户会不会流失……

另外最近miui论坛貌似也在讨论 MiOTA 的问题了,直接就让哥的流量翻了三倍……这该算是好事呢,还是好事呢?(哥有新浪 SAE 的开发者认证,不用担心流量问题)


啊,1:20了……而且也是第一次写这么长的文章……就到这里了好吧……嗯

【吐槽】Discuz 开发中遇到的郁闷问题

这回主要是对插件添加功能,原插件是:http://addon.discuz.com/?@kk_doublecredit.plugin

客户需求:板块设定中的特殊积分规则对VIP用户也翻倍

过程:

首先先找到需要修改的地方:

print_r($_G['forum']);

得$_G['forum']['creditspolicy']数组名;

然后插件加一行:

$_G['forum']['creditspolicy'][$action]["extcredits{$cid}"] *= 2;

却一直无效……


首先怀疑是hooks运行位置不对,后来检查发现在forum.php内就已经加载了钩子,且修改正常。

然后又怀疑$_G['forum']这个数组……print_r显示正常

…………

然后分析updatepostcredits这个函数,一直追溯到source/class/class_credit.php:

http:// 大概是423行的样子:
$forumfield = C::t('forum_forumfield')->fetch($fid);
$policy = dunserialize($forumfield['creditspolicy']);

你妹,又从数据库里取一遍……

我就郁闷了,你这有意义么?
既然你要去数据库取,为啥又要$_G['forum']['creditspolicy']呢?

这里其实根本就没有必要读取数据库……

于是解决方法也很简单,加上

$policy = $_G['forum']['creditspolicy'];

就好了

最近的任务一览表

Discuz 插件:

1.VIP插件第二代,功能与界面重新设计(核心部分已经完工)
2.Discuz微博墙插件,支持新浪和腾讯,

其中腾讯oAuth部分已经完工,新浪已完成,模板尚未制作

搞定
3.Discuz站点助手(持续跳票,已放弃)

[music1g play=#-13452]

来自Android版 WordPress

KK Updater 介绍

当插件有最新版时,您的网站上将出现下面的提示:

updater 1.jpg

此时请直接点击右下角的“更新”按钮,输入管理员密码(如果您还没有登陆后台),进入自动更新流程。

注意:此过程均为自动完成,无须人工干预

界面如下:

updater 2.jpg

- 阅读剩余部分 -