# Z-Blog应用中心 应用审核规范 ## 注意 * 在应用中心上传应用,均需遵守此规范。规范如有改变,会通过邮件等方式通知开发者。 * 违反以下规范,视情节轻重可能有以下处罚: * 拒绝上架应用,或下架已上架应用; * 在Z-Blog官方网站各处通报; * 降低开发者权限; * 关闭开发者收费应用发布权限; * 封禁开发者,并下架所有应用。 * 并非完全满足以下标准即可保证上架,当遇到收到版权投诉等特殊情况时,不能保证上架。 ## 制定标准 * 保证应用的可用性与兼容性; * 大部分情况下,保证刚会使用 Z-Blog 的初级用户可方便的使用; * 大部分情况下,保证不会网站制作、图片制作的用户可方便的使用。 ## 应用强制认证标准 违反以下规则之一,完全不可上架到应用中心。 * 不涉及编码转换等情况必须使用UTF-8编码,并确保文件不带BOM头; * 没有安全漏洞(包括SQL注入、跨站脚本攻击、跨站请求伪造等): * SQL注入:Z-BlogPHP版本所有操作博客数据库的SQL均需要使用系统自带的SQL查询库,不允许手写SQL; * 跨站脚本攻击:Z-BlogPHP 1.5.2起引入XssHtml,请在需要白名单的输出点调用它; * 跨站请求伪造:Z-BlogPHP 1.5.2起引入CSRF防御功能,见:https://wiki.zblogcn.com/doku.php?id=zblogphp:development:features:1.5.2:security * 不存在主观故意可能给用户造成损失的恶意代码; * 即使用户使用盗版应用,也禁止对用户数据进行破坏 * 在用户未明确知悉的情况下,严禁对其它应用进行任何的干扰或修改,除非该应用自行提供了公共接口; * 不含有.DS_Store、thumbs.db、_notes、.idea等无用文件或文件夹,不含有隐藏文件。 * 非应用本身功能所必须的第三方接口本身不再能使用等情况,不得在任何情况下干扰用户的正常使用; ### 主题 * 必须引用c_html_js_add.asp或php。 * 带有Z-Blog版权标识(允许使用文本、图片、JavaScript等,但需要能让用户感知)。 * 指定页面编码为UTF-8(<meta charset>)。 * 标题等长度过长不会导致变形。 * 类似网站Logo等每个站点都不同的配置项,必须提供插件以便用户进行配置,或是利用系统的侧栏进行管理。 * 满足对应平台的应用认证标准。 ### PHP应用 * 移除了所有的UTF-8 BOM头; * 文件名大小写正确,无404页面; * 在主流的操作系统(Windows 2003 SP2 / 2008r2 / 2012 / 2016、Ubuntu 16.04 LTS / 18.04 LTS、CentOS 6 / 7)和服务器软件(IIS 6 - 10、Apache 2、nginx 1.4 - 1.12)下可正常运行。 * 在应用支持的最低版本以上的PHP版本(默认为PHP 5.2)均可正常运行。 ####权限判断 * 管理页面等使用$zbp->CheckRights,而不是$zbp->User->Level来判断权限。 #### 数据库 * 必须使用$zbp->db->xxx执行SQL语句; * 涉及到表的时候必须用$table调用; * 建表必须在$datainfo和$table内注册; * 不使用$zbp->db->sql而自行拼接SQL语句,需同时支持MySQL和SQLite数据库; * 不对系统的数据表的结构作任何修改。 * 不得使用MySQL的ORDER BY rand() ### ASP应用 * 需要在Windows 2003 SP2及以上版本、IIS 6.0及以上版本可正常运行。 #### ASP主题要求 * 非特殊情况,必须使用侧栏管理标签(<#template:sidebarX#>)。 * 统计必须调用AddViewCount和LoadViewCount函数。 * b_article-single.html 必须包括统计代码(可隐藏)。 #### 命名标准 * 在include.asp内include的其它文件,所有的全局变量、函数、类等,全部以“插件ID\_XXX”或“XXX\_插件ID”命名; * 如需创建数据表,必须以blog\_plugin\_插件ID为开头命名表; * 如需使用配置类,配置名必须以插件ID开头。 * 如需使用Meta存储附加数据,字段名必须以插件ID开头。 ####数据库 * 对系统数据库操作时,SQL语句必须同时支持Access(*.mdb)和SQL Server 2000。 * 允许针对SQL Server开发更多的扩展功能,但是必须做好版本判断,保证在不受支持的SQL Server版本下不使用新版本特性。 ## 非强制认证标准 非强制代表不建议违反,并且被查出也会有拒绝上架的可能,但如有必要可解释说明及报备。 * Firefox 70+、Chrome 60+、Safari in macOS 10.12+浏览器下不错位,可正常使用所有功能; * Internet Explorer 11、Firefox 60+、Chrome 49+浏览器下不错位,隐藏不可正常使用的功能; * 不改动任何的系统文件和语言文件,不对非应用本身创建的文件进行任何修改; * ASP及PHP代码不得经过任何形式的对可读性造成影响的加密、混淆; * JavaScript在提供混淆版本的同时需在同一目录提供Source Map或未混淆版本; * 原则上不得利用任何方式引用外站任何资源,引用需要在应用中心页面写明引用了哪些资源; * 在Chrome最新Stable版本打开Developer Tool,在Console不显示任何Error; ### 主题 * 除非主题需要兼容低版本Internet Explorer,否则不要引用html5shim等为低版本浏览器提供支持的脚本; * 解决W3C认证时发现的以下问题: * Stray end tag(未闭合标签) * Duplicate (something)(重复的ID、属性等) * Element (someElement) is missing a required instance of child element (someElement)(缺少子元素) * No element (someElement) in scope but another end tag seen(发现多余的闭合标签) #### Z-BlogPHP 1.5以下需要遵守标准 * 非特殊要求,勿自带jQuery(系统自带1.8.3)。 #### Z-BlogPHP 1.5以上需要遵守标准 * 使用zblogphp.js,弃用common.js。 #### 响应式主题 * 保证iOS 11.0及以上版本Safari、Android当前版本的QQ浏览器、UC浏览器(不需要考虑系统自带浏览器,自从Android 5.0以后其已经可自动升级)不出现兼容性问题,可正常使用绝大部分功能。 * 保证以下设备对应的分辨率可正常浏览: * iPad Air; * iPad Mini; * iPhone SE; * iPhone 11; * 华为 P30。 #### 命名标准 * 在include.php内require或include的任何PHP文件内,所有的全局常量、变量、函数、类等,原则上全部以“应用ID\_XXX”或“XXX\_应用ID”命名; * 如需创建数据表,原则上必须以%pre%plugin_应用ID为开头命名表; * 如需使用配置类,原则上配置名必须以应用ID开头; * 如需使用Meta存储附加数据,原则上字段名必须以应用ID开头; * 如同一开发者欲在自己的应用下使用公用配置,需进行报备后方可使用。 ####数据库 * 必须使用$zbp->db->xxx执行SQL语句; * 涉及到表的时候必须用$table调用; * 建表必须在$datainfo和$table内注册; * 不使用$zbp->db->sql而自行拼接SQL语句,需同时支持MySQL和SQLite数据库; * 不对系统的数据表的结构作任何修改。 * 不得使用MySQL的ORDER BY rand() ##收费应用要求 * 开发者需在3个工作日内,对用户的询问进行处理,已向官方报备并在应用详情页面明确告知的除外。 * 如涉及取消用户授权等直接影响正常使用的问题,直接交由Z-Blog官方,不得私自处理。 * 应用本身必须提供完备的配置项,功能不可过于简单。 ## 优先审核标准 * 原创主题; * 响应式主题; * HTML标签已经语义化的主题; * W3C验证首页和文章页无任何提示的主题; * 使用语言标签的主题; ===== 应用上架自检 ===== * 应用上架后,会自动进入自动审核流程。开发者应尽力确保自动审核不出现错误。[[https://github.com/zsxsoft/zbp-app-validator]]是该自动审核工具的开源版本,但不提供部署说明。