禁止发布直接 iframe 外嵌其他网站且没有和论坛互动功能的应用
禁止发布应用主体功能为 iframe 、Flash 或者 js 直接嵌套外站的
iframe 中嵌套的外部站点链接,非认证用户只允许嵌套知名网站链接,不允许嵌套私人小网站等安全性不可确认的网站
代码不可加密,要有比较整洁的代码格式,格式太乱导致阅读困难的插件不予通过
插件不能有对 plugin 目录以外任何文件的操作,包括修改删除源文件或新增其他文件(缓存目录除外),如果有写 log 或者类似 sitemap.xml 这样的文件,应用卸载程序中应该有删除这些文件的操作
插件在安装或运行过程中,如果在缓存目录写了文件,那么在卸载插件时要能自动将这些文件删除
禁止安装模版时自动合并安装多个不相干的插件
禁止应用前台包含含有应用作者网站的网址,只允许放置在后台。前台只允许在应用底部或页脚添加版权的文字及链接,如“Designed by”等类似文字
禁止应用去除标题及页脚的“Powered by Discuz!”文字
与默认模板相比改动较小的应用,不允许审核通过
免费应用前台和后台均不能有非应用中心付费版或授权销售的推广链接
插件及模版必须兼容主流浏览器(IE、Chrome、Firefox)。其中 IE6、7必须兼容哪怕关闭某些效果或功能(2014.4.8 起将放弃对IE6、7的审核)
不兼容宽版的模板必须保证在宽版特性下显示出正常的窄版
禁止在代码中通过隐藏暗链的方式给自己网站增加 SEO
模板类的应用禁止只变更少量图片就新增一个应用的做法
不允许依赖任何纯 FLASH 内容(但允许 FLASH 和 HTML5 双版本,浏览器支持 HTML5 采用 HTML5 ,反之采用 FLASH )New!
禁止通过各种方式携带有危害用户站点安全的代码,一经发现一律封号处理
根据 Discuz! 版本的不同和数据库操作方式的不同,所有涉及数据库操作的 GET、POST、Request、Cookie 变量和 getgpc() 函数获取的变量都要进行安全过滤
所有参与文件操作的 GET、POST、Request、Cookie 变量和 getgpc() 函数获取的变量都要进行安全过滤和合法性验证(如以上变量作为被操作文件的路径或文件名称时)
对于会对 GET 等变量进行统一处理或封装的应用,应严格注意处理过程是否安全
所有进行表单处理或请求处理的文件中都应验证请求来路的合法性,添加submitcheck()
所有文件开头必须有IN_DISCUZ判断、所有使用后台操作的文件必须有IN_ADMINCP判断(个别 api 接口文件除外)
为防止 XSS 漏洞,对于输出到页面中的某些变量务必进行 dhtmlspecialchars() 过滤
对系统敏感数据表如 post、thread、member 表的 SQL 操作,要注意效率问题,建议创建新表,而不是添加字段
注意代码中匹配替换的地方,防止正则表达式书写上的漏洞
注意模版中的一些敏感函数,如eval()等是否包含恶意代码
注意代码中是否有通过各种手段非法拼凑活截断加入非法链接或代码的地方
文件目录中不能有与插件不相关的文件,如一些 bak、svn 文件等
跟踪各种 SQL 操作,以防止 SQL 注入,确定 SQL 语句中最后操作的变量都是安全的,注意对关键表如 member 表的 SQL 操作性能问题
有的开发者文件中存在非法操作,指出后他会修改,但审核通过后他又会更新改回去,这种现象常见与对 plugin 目录外的文件操作
模板类型的应用严禁包含插件以及插件特性的代码逻辑,但允许包含含有模板输出逻辑的 php 文件,且 php 文件必须放在“TPLDIR/php”目录下{eval include TPLDIR.'/php/xxx.php';} 方式引用
插件类型的应用严禁通过修改系统变量的方式修改他人应用返回内容New!
模板类型的应用严禁去除任何系统内置的嵌入点,但允许添加嵌入点New!
“分支版本”、“扩展组件”中禁止提交包含中文文件名的任何文件,以防应用在线安装失败New!
原则上不允许依赖 MAGIC_QUOTES_GPC 常量或者 PHP 自带的魔术引号相关函数,如必须使用则需要先判定是否存在New!
必须支持 HTTPS 和 HTTP 自适应,不允许写带协议头的链接请求站内资源,不允许以 HTTP 方式请求站外资源New!
不允许依赖 $_GET|$_POST 的兼容处理 ,即 $_G['gp_xxx'] 取值New!
系统内 jQuery 不保证版本号稳定。如果需要一个稳定的版本,应采用自带的组件,并使用闭包内调用 jQuery ,且通过 var plugin_(plugin_identifer)_jquery = jQuery.noconflict(true); 处理兼容性问题。其他组件命名方式为 plugin_(plugin_identifer)_name 。不允许裸调用 jQuery.noconflict() (不带声明)New!
数据表命名推荐采用 pre_plugin_(plugin_identifer)_example 进行命名。目前也接受其他命名方式,如大量作者选择的 pre_(plugin_identifer)_example ,但强制性规范禁止的命名规则除外New!
自带表类必须兼容 LSP (
Liskov 替代原则 )。如果依赖于主线表,不允许依赖 table 表的兼容性命名。兼容多版本需要自行判定并调用不同名称的方法,或开启不同分支版本维护
(X3.5起强制要求)New!如涉及到 IP 地址,必须兼容 IPv6 的存储、处理,必须同时存储连接时使用的端口号(X3.5起强制要求)New!
不允许使用 array_key_exists 判断 $_G 以及 $_G['example'] 是否存在(X3.5起强制要求)New!
页面如并非如邮件等特殊功能,应统一采用 <!DOCTYPE html> 作为头部(X3.5起强制要求)New!