插件安装

下述的步骤只是按照通用流程进行说明,如果与插件安装说明中的描述不符,请以插件提供者的描述为准。


插件目录结构,以及文件名约定规则

举例插件名称为打工插件,唯一ID为work,那么插件的文件夹名称应该跟唯一ID保持一致,其所有文件应该存放在 hack/work目录下,以下内容将以此插件为例说明。

1、插件根目录 hack/work目录

存放插件主要文件,包括在根目录下的文件内容如下:

2、图片目录 hack/work/image

此目录存放插件文件中所使用到的图片文件,强烈要求在文件中使用$hkimg变量来指定此目录,这样指定目录将会让文件有极大的灵活性。

3、插件包含文件 hack/work/require

倘若插件比较大,可以把一些常用的函数写成文件放入到require文件夹。

4、插件模板文件夹 hack/work/template

不同于5.0之前的版本,所有模板均放置到template下,前台放置于template/wind 后台放置于template/admin,而现有的插件体系规定所有的插件模板均放置在这一个目录下,不再需要分别放到两个文件夹中。

5、缓存文件

出于文件777属性考虑,以及缓存文件的统一部署,建议插件开发者将缓存文件存储为data/bbscache 目录下(此目录已经可写,否则无法使用), 同时,出于进一步的为插件使用者着想,建议缓存文件使用程序生成,来避免第一次使用插件时,因为没有缓存文件或者缓存文件不可写而导致的错误--我们必须 考虑到,部分用户不熟悉电脑操作,并不了解如何设置文件777属性,所以建议并不附带默认的缓存文件,而默认的缓存文件,在插件使用者第一次使用的时候, 自动生成到data/bbscache目录下,这样将避免插件安装中频繁出现的777问题。 备注提示:一般附带缓存的文件,可内置某些默认值,然后插件 完成安装之后,使用者应该进行一次设置提交来保存它所需要的设置,在这个时候设置再生成缓存文件到data/bbscache目录下一个缓存文件,能够有 效的避免需要设置777的问题]

phpwind插件开发代码安全基础及简单检测

1、数据过滤

$_GET、$_POST的变量通过InitGP() or GetGP() 来获取。确认为数值为变量要(int) or (float)强制转换,如:$tid = (int)GetGP('tid'); 。字符串变量要经过Char_cv()过滤,如:$subject = Char_cv($GetGP('subject'));。在PW7中,InitGP() 默认开启Char_cv()过滤,因此不能版本间的兼容问题得处理好,避免有效内容出错。
$_SERVER变量,在phpwind7中通过全局变量$pwServer或GetServer() 来读取,而在其他版本中,对单独用到的,必须经过addslashes() or Char_cv().

2、SQL注入

SQL语句中的变量,在phpwind7中,保证最后经过过滤函数pwEscape() pwImplode()、pwSqlSingle()、wSqlMulti() 。如:$tbid = $db->get_value('SELECT ptable FROM pw_threads WHERE tid='.pwEscape($tid,false));
而在其他版本,SQL语句中的变量两边必需加个单引号,同时,变量必需是经过了转义的。特别注意从数据库中读取出来的值再次写入数据库时,得进行转义,避免二次注入。

3、跨站脚本

输出到模板HTML的字符串变量,保证都是经过Char_cv().
杜绝直接在HTML模板中写类似$_GET、$_POST、$_SERVER等变量

4、文件包含

include() or require() 文件路径包含变量时,必需经过Pcv()的过滤,如include_once Pcv(D_P.'data/bbscache/'.$filename);