论坛首页 编程语言技术论坛

SPS Discuz7.2 超强给力修改版 update 2012.02.14

浏览 12447 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-01-28   最后修改:2012-07-23

 

 

 

 

SPS Discuz7.2 超强给力修改版

 

 

Discuz目前最新版为DZ X2,但功能繁多程序臃肿,如果仅是搭建一个论坛那么使用DZ7.2是较好的选择。
故基于康盛官方UCenter1.6和Discuz! 7.2最新版本程序进行修改有此SPS版。


原版本使用MySQL MyISAM引擎,在数据量达到一定规模后当网站流量较大,高读写并发时数据库将会出现严重锁表导致数据库性能急剧下降于是网站访问变慢;原版PHP程序代码中不少缺陷尚未得到官方修正及优化(估计也不会新补丁了)使得服务器不能发挥应有性能。此修改版在安全(Security), 性能(Performance),稳定(Stability)这三方面相对于原版有极大提升,故称SPS版本。

Security
原版对账户口令处理方式为md5散列,如果网站被拖库虽然不会有这次CSDN及各大网站泄漏用户明文口令那样严重,但在运算性能日益增强的处理器前md5口令已经变得相当脆弱。如果你的口令长度只有小写字母再加上数字,假设口令的长度是6位,那么在目前一台比较新一点的PC机上,穷举所有的口令只需要40秒钟。而几乎有90%以上的用户只用小写字母和数字来组织其口令。对于6位长度的密码只需要最多40秒就可以破解了。即便DZ有使用每用户salt机制,但现在已经出现专门针对DZ口令处理方式(md5(md5(passwd)+salt)的破解网站。并且原版程序在修改口令时表单提交的当前口令及新口令都是通过明文方式提交,如果存在网络嗅探那么就毫无安全可言。

SPS版登录验证时采用SHA256散列经过SITE_SALT掺盐处理后的口令,即使网站未使用TLS/SSH协议保护且存在网络嗅探也具有相当的安全性;入库口令采用bcrypt(blowfish)处理,无论是跑字典还是制作彩虹表的成本都相当大。并且可以根据(自己网站的或者破解者的)服务器运算性能设定 work factor(BC_FACTOR)值让该算法运算开销在安全性和性能之间达到一个平衡————如果日后处理器运算性能大幅度提高,那么提高 work factor 值即可让运算速度降下来。对口令的SHA256+bcrypt结合处理方式极大提高了网站账户安全水平。

 


Performance
原版使用MyISAM引擎,在大数据量高并发读写下表锁将会使数据库性能严重恶化甚至发生坏表。SPS版把数据库更换成PostgreSQL(以下简称pgsql)。pgsql同样是开源数据库,并且BSD版权协议比MySQL的双重授权更加开放,技术先进性能高超,远非MySQL可以匹敌。技术比较可参考此贴 【PostgreSQL与MySQL比较】http://bbs.chinaunix.net/thread-1688208-1-1.html


在pgsql强悍支持下SPS版实现了分区表、事务、部分索引,显著提升数据库运行性能,结合小巧高效的SCWS中文分词程序实现了主题标题FTS全文搜索功能(考虑到数据库容量帖子内容全文搜索暂未实现,故切勿开启论坛的内容全文搜索,可使用首页的google站内全文搜索功能替代)。通过分区表可以分散各版块压力从而极大提高性能(在新建版块时全自动创建post分区表),这比Discuz最新的X系列版本中的表分区更加有效,DZ X2采用的表分区是对数据表纵切方式分离,可以有效减小主表体积,对于MySQL这样索引组织表而言有性能提升,但划分出的表需要原表中同样的PK字段,得失相较性能还是有提升。而对于pgsql的堆表来说这种划分方式对性能提升不明显,凭借于pgsql特色的TOAST(The Oversized-Attribute Storage Technique)线外存储技术即自动实现了X2的分区表功能————默认情况下大于2KB尺寸的支持线外字段类型值将会被自动压缩然后通过OID关联保存到表外。就是借助TOAST技术SPS版的posts表性能已经不逊于经过分表的DZ X2的posts表(DZ7.2原版不支持表分区这个功能)。

pgsql给力的部分索引功能让你可以通过监控网站运行时SQL执行压力有针对性地创建特定索引来实现特定查询(比如版块精华帖)性能的大幅度提升。
如果网站PHP跑在PHP-FPM模式(比如nginx+php-fpm),那么SPS版在fastcgi_finish_request()技术上实现的队列机制可以在执行无需结果的写库操作(比如更新登录信息或者更新论坛信息帖子计数信息等)之前即关闭与http server(nginx)连接。虽然对解决502错误无用但可以减轻http server负担且提升用户浏览体验。

移除与论坛无关的信息采集发送代码,删除新版本自动升级通知的接口避免论坛受到此接口漏洞的攻击。

 

Stability
原版的MyISAM引擎不支持事务,在做管理操作时如果执行时间过长超时中途出错则会出现不可预料结果。在康盛DZ官方论坛bug反应版块有站长曾遇到这种情况:批量删除滥发广告的账户,执行操作后失去响应,结果把大量非选中的正常用户也删除了!还有论坛的管理员账户莫名“自动”降级变成普通用户。通过pgsql的事务支持,SPS版PHP代码相对原版有大幅度修改,重要的论坛管理操作皆采用事务来保证执行结果的稳定性及可预期性。如果采用pgsql的PITR功能则可进行论坛数据热备,实现可以回滚论坛数据到任意指定时间点这个超级需求~


SPS版本除了电子商务的支付部分似乎存在问题其他功能经过测试运行正常。

程序安装请参见 INSTALL.TXT 文件,其中有重要参数的设定说明!

为啥成为超强给力版呢? Super Power Supply是也 :)

本SPS修改版处于技术研究,如果你准备安装使用该SPS修改版则请先参阅康盛官方网站Discuz相关版权协议。
若有指教或技术探讨请访问
http://waiting.iteye.com/blog/1343663
或QQ:1661926154

    -- waiting    2012/01/28

 

 

SHA1:

6306bb1837d6ebd3f70c5c72f35521854b7b10aa *bin\init_site_rights.sh
dea031544e6d24cf3b35c42a1f43a3867e372297 *bin\scws-1.1.9.tar.bz2
942a2ab19f5f22727af5eb28bcf97f110d3d0981 *bin\scws-dict-chs-utf8.tar.bz2
29f4990d60044f0499e442a7456cb855c44491fd *bin\set_config_rights.sh
71fb25160e68c3a62576acad2151337dda7dd788 *bin\www.tar.bz2
915ceaf76d319a6af4eeff0084e75aef63d36322 *doc\CHANGE.TXT
a4c471798130b184a5464de8a93ba80c1ef19ecb *doc\INSTALL.TXT
611193b3f7cdea5d4f2b71fccf08cc19efb3c16a *doc\README.TXT
f6380a0975711255832d11bae943336f4a9a86fb *sql\dz-20120301.sql.gz
4db98f38bc613767881e70a695a1194d25f6f2bb *sql\uc-20120301.sql.gz

 

 

ADD: PHP需要PDO以及PDO postgresql驱动 .
pgsql配置文件postgresql.conf需要修改配置,把 standard_conforming_strings 参数设置为off以便对\n转义字符正常解释

------------------------------update 2012.02.09
数据库结构有变化,所以必须以新版本的sql创建数据库表
+    创建版块时自动为此版块创建关联post分区表,可极大地提高数据库读写性能。删除版块时自动删除关键post分区表
+    使用tid散列方式分割附件分区表,可大幅度提高数据库读写性能
+    搜索字符串支持过滤符号(+-! AND OR), 高级搜索中的“作者”关键字也同步更新。
    比如可以“postgresql -mysql” 或者 “postgresql !mysql”来排除mysql关键字,
    以“postgresql +mysql” 或者 “postgresl AND mysql”来实现约束.
    注意如果输入“php -"java ok"”的效果等同于“php -php +ok”,可以这样输入“php -java -ok”来实现预期

*    管理中心回收站主题列表日期改为"Y-m-d H:i:s"显示详细时间

-    管理中心添加用户后用户名未同步更新到FTS表中
-    搜索大小写敏感
-    管理中心回收站主题列表操作人栏结果有时不能正确显示操作人及操作时间(SQL bug)
-    管理中心回收站主题搜索SQL bug

 

 

------------------------------update 2012.02.14
-    posts索引创建错误
-    插件“我的马甲”工作不正常
-    插件“楼层奖惩”工作不正常
*    创始人口令修改条件放宽。只要为空即可修改
?    manyou功能仍不正常

SHA1 d62d33fc21b18050f00cfab09a204a704528d8f7 *patch1.7z

 

   发表时间:2012-02-07  
严重支持。 作为曾经的discuz用户对这些问题深有体会。 不知道你这个修改能否改善discuz论坛的灌水问题?
0 请登录后投票
   发表时间:2012-02-07  
good.

不过原版的7.2性能还好吧. Discuz由诞生以来出现的问题都不是由暴力破解引起的, 而是一些不经意留下的漏洞被人找到和利用, 所以在密码加密那的工作是更完善了, 但我想那些不怀好意的人也不会钻原本就硬的墙, 而多是选择其他途径
0 请登录后投票
   发表时间:2012-02-08  
yawei 写道
严重支持。 作为曾经的discuz用户对这些问题深有体会。 不知道你这个修改能否改善discuz论坛的灌水问题?


对于绕过放灌水机制的手段我不清楚所以无法针对性地封堵,不过多半是采用SQL注入方式。如果是这种方式那么SPS修改版采用的PDO::prepare/PDO::quote+transaction组合方式基本可以杜绝这漏洞。

0 请登录后投票
   发表时间:2012-02-08  
nakupanda 写道
good.

不过原版的7.2性能还好吧. Discuz由诞生以来出现的问题都不是由暴力破解引起的, 而是一些不经意留下的漏洞被人找到和利用, 所以在密码加密那的工作是更完善了, 但我想那些不怀好意的人也不会钻原本就硬的墙, 而多是选择其他途径



程序存在不少问题,详见 【Discuz 7.2坑爹集锦】 http://waiting.iteye.com/blog/1343663

不过主要问题还是在于数据库,MySQL在大并发海量数据下问题多多。对于DZ7.2来说如果数据量超过(大概)300万那么性能将会急剧恶化(如果服务器磁盘IO性能强悍会不明显)。

对DZ口令存储方式的修改主要是避免被拖库后的暴力破解,http://www.cmd5.com/ 的破解方式已经保护DZ的口令散列处理方式 .

 

PS: SPS将会有个更新版出来,除了修补已有的bug(主要是修改版带来的),更采用每个版块一个post表对应的方式在建立版块的时候自动创建数据库表,对性能提高更大。附件表使用tid散列方式分表,同样提升数据库性能。

 

0 请登录后投票
   发表时间:2012-02-09  
Discuz有你这种粉丝真是不枉此生啊...
0 请登录后投票
   发表时间:2012-02-09   最后修改:2012-02-09
nakupanda 写道
Discuz有你这种粉丝真是不枉此生啊...


不太粉~
是帮朋友论坛升级,看丫的代码实在是不少洞洞遂修补之。改了之后发现mysql数据库才是性能瓶颈所在,于是干脆把数据库也更换了,这下代码改动就大大了……
0 请登录后投票
   发表时间:2012-02-09  
2012.02.09更新

2012/02/09:
数据库结构有变化,所以必须以新版本的sql创建数据库表
+ 创建版块时自动为此版块创建关联post分区表,可极大地提高数据库读写性能。删除版块时自动删除关键post分区表
+ 使用tid散列方式分割附件分区表,可大幅度提高数据库读写性能
+ 搜索字符串支持过滤符号(+-! AND OR), 高级搜索中的“作者”关键字也同步更新。
比如可以“postgresql -mysql” 或者 “postgresql !mysql”来排除mysql关键字,
以“postgresql +mysql” 或者 “postgresl AND mysql”来实现约束.
注意如果输入“php -"java ok"”的效果等同于“php -php +ok”,可以这样输入“php -java -ok”来实现预期

* 管理中心回收站主题列表日期改为"Y-m-d H:i:s"显示详细时间

- 管理中心添加用户后用户名未同步更新到FTS表中
- 搜索大小写敏感
- 管理中心回收站主题列表操作人栏结果有时不能正确显示操作人及操作时间(SQL bug)
- 管理中心回收站主题搜索SQL bug

+添加,*修改,-修复
0 请登录后投票
   发表时间:2012-02-10  
waiting 写道
nakupanda 写道
Discuz有你这种粉丝真是不枉此生啊...


不太粉~
是帮朋友论坛升级,看丫的代码实在是不少洞洞遂修补之。改了之后发现mysql数据库才是性能瓶颈所在,于是干脆把数据库也更换了,这下代码改动就大大了……

discuz产品不错,就是漏洞太多,而且很多问题一直得不到修复,难得碰上你这种高手。 我看他们应该找你做架构师兼系统分析。
0 请登录后投票
   发表时间:2012-02-10  
我记得discuz的时区换算也有问题, 国内使用大家都是北京时间所以没影响,也不知道现在修复没有。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics