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站内全文搜索功能替代)。通过分区表可以分散各版块压力从而极大提高性能(SPS默认创建了根据时间划分的3个分区表,如果需要根据版块划分则需要建站时定制),这比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
?
ADD: PHP需要PDO及pdo postgresql