插件安裝流程︰
下述的步驟只是按照通用流程進行說明,如果與插件安裝說明中的描述不符,請以插件提供者的描述為準。
- 下載所需的插件
PHPWind百款插件,集大家所愛,請下載適合您當前論壇情況的插件,並仔細閱讀插件安裝說明。 - 按插件安裝說明修改程序、模板、上傳插件
插件上傳非常簡單,將插件目錄上傳到論壇根目錄下的hack文件夾下即可。 - 安裝插件
上傳完畢後,進入論壇後台->風格插件->插件中心,在"未安裝插件"欄目下找到該插件,選擇安裝。 - 插件管理
進入論壇後台->風格插件->插件中心,在"已安裝插件"欄目下找到該插件,開啟插件、設置插件參數,開始使用該插件。
插件目錄結構,以及文件名約定規則
舉例插件名稱為打工插件,唯一ID為work,那麼插件的文件夾名稱應該跟唯一ID保持一致,其所有文件應該存放在 hack/work目錄下,以下內容將以此插件為例說明。
1)插件根目錄 hack/work目錄
存放插件主要文件,包括在根目錄下的文件內容如下︰
- index.php 插件前台主文件,如果不存在此文件,插件則不顯示前台界面。
- admin.php 插件後台主文件,如果不存在此文件,插件則無後台管理功能。
- sql.txt 插件安裝所需要執行的SQL語句,禁止Drop PHPWind自身數據以及刪除已有數據等危險操作。如果不需要執行SQL語句變動數據庫,可以不存在此文件。
- readme.txt 插件使用說明,來提供給用戶相關說明文檔。
- 倘若無前台顯示/後台設置等,可以沒有相應的文件,如果有相應功能,則文件命名必須按照指定規則。
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插件開發代碼安全基礎及簡單檢測
數據過濾
$_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().
SQL注入
SQL語句中的變量,在PHPWind7中,保證最後經過過濾函數pwEscape() 、 pwImplode() 、pwSqlSingle() 、 pwSqlMulti() 。如︰$tbid = $db->get_value('SELECT ptable FROM pw_threads WHERE tid='.pwEscape($tid,false));
而在其他版本,SQL語句中的變量兩邊必需加個單引號,同時,變量必需是經過了轉義的。特別注意從數據庫中讀取出來的值再次寫入數據庫時,得進行轉義,避免二次注入。
文件包含
Include() or require() 文件路徑包含變量時,必需經過Pcv()的過濾,如include_once Pcv(D_P.'data/bbscache/'.$filename);
跨站腳本
輸出到模板HTML的字符串變量,保證都是經過Char_cv().
杜絕直接在HTML模板中寫類似$_GET、$_POST、$_SERVER等變量
以上僅為簡單的概述下,有興趣參與插件開發的可以到FAQ平台開一些資料,或者到官方板塊 插件開發 參與學習研究