十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
      南昌百恒網(wǎng)絡(luò)微信公眾號 掃一掃關(guān)注
      小程序
      tel-icon全國服務(wù)熱線:400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
      掃一掃打開百恒網(wǎng)絡(luò)微信小程序

      百恒網(wǎng)絡(luò)

      南昌百恒網(wǎng)絡(luò)

      ThinkPHP安全規(guī)范指引實操

      Wangs 2024-02-26 3338
           首先,沒有絕對的安全,只要你有足夠的安全意識才能盡可能的杜絕安全隱患。規(guī)范的使用框架,能讓你盡量避免一些看起來比較幼稚的安全問題。本文描述的安全注意事項主要是指生產(chǎn)環(huán)境下面的安全策略,本地開發(fā)的情況下有時候為了調(diào)試的需要安全并不是第一考慮。

      本文主要和大家探討一下ThinkPHP的安全注意事項,可以作為ThinkPHP建議的安全規(guī)范實踐。(如果有新的內(nèi)容我也會及時補充)

      首先,沒有絕對的安全,只要你有足夠的安全意識才能盡可能的杜絕安全隱患。規(guī)范的使用框架,能讓你盡量避免一些看起來比較幼稚的安全問題。本文描述的安全注意事項主要是指生產(chǎn)環(huán)境下面的安全策略,本地開發(fā)的情況下有時候為了調(diào)試的需要安全并不是第一考慮。

      ThinkPHP在考慮開發(fā)體驗的同時,仍然十分重視框架的底層安全,雖然屢有安全漏洞被播報,但官方都是第一時間進行修復(fù)處理,而且大部分漏洞只要開發(fā)者有一定的安全意識都是可以避免的,今年也和國內(nèi)的幾個安全團隊建立了合作關(guān)系,有助于提前發(fā)現(xiàn)和及時修正框架可能被利用的漏洞或者隱患。

      規(guī)范部署

      這一點很多開發(fā)者不是特別重視,安全是一個整體性的問題,任何一個環(huán)節(jié)出問題,帶來的后果都是一樣的嚴重,部署的安全策略是一個基礎(chǔ)安全問題。

      很多開發(fā)者往往不按照官方的部署規(guī)范進行部署,請務(wù)必把你的WEB根目錄指向public目錄而不是應(yīng)用根目錄,并且不要隨意更改入口文件的位置。public目錄下面不要放除了入口文件和資源文件以外的其它應(yīng)用文件。

      關(guān)閉調(diào)試模式

      在部署到生產(chǎn)環(huán)境的時候,確保你已經(jīng)關(guān)閉了調(diào)試模式,可以通過修改環(huán)境變量的方式關(guān)閉調(diào)試模式

      APP_DEBUG=false 

      無論是本地開發(fā)還是生產(chǎn)環(huán)境部署,都不建議直接通過修改配置文件的方式開啟/關(guān)閉調(diào)試模式,而應(yīng)該使用環(huán)境變量(本地開發(fā)可以通過定義.env文件)。

      關(guān)閉調(diào)試模式后,系統(tǒng)的健康狀態(tài)和運行監(jiān)控主要依靠日志或者你使用的監(jiān)控服務(wù)。所以,要養(yǎng)成定時檢查日志和運行狀態(tài)的習(xí)慣。

      請求變量過濾

      永遠不要相信用戶的輸入,這是一句至理名言。盡可能的過濾請求變量能有效防范大部分的漏洞和隱患。

      框架建議的獲取請求變量的方法是Request類的param方法(如非必要不要再使用get或者post方法獲取,更不要使用原生的$_GET/$_POST等方法獲取)。

      public function index(Request $request) { $name = $request->param(\'name\'); // 在這里可以根據(jù)你的業(yè)務(wù)需求進行更嚴謹?shù)倪^濾 // 例如 $name = $request->param(\'name\',\'\',\'htmlentities,strtolower\'); // 或者使用驗證器進行專門的驗證 } 

      對于有明確類型的請求變量,可以在使用param方法的時候使用類型強制轉(zhuǎn)換,例如:

      public function index(Request $request) { // 強制轉(zhuǎn)換字符串數(shù)據(jù) $name = $request->param(\'name/s\'); // 強制轉(zhuǎn)換整型數(shù)據(jù) $name = $request->param(\'id/d\'); // 強制轉(zhuǎn)換浮點型數(shù)據(jù) $name = $request->param(\'score/f\'); } 

      或者直接使用方法參數(shù)獲取請求變量

      public function index(string $name) { // 在這里可以根據(jù)你的業(yè)務(wù)需求進行更嚴謹?shù)倪^濾 // 或者使用驗證器進行專門的驗證 } 

      如果你需要對所有數(shù)據(jù)進行處理,可以設(shè)置全局的過濾方法。對不同的應(yīng)用需求設(shè)置default_filter過濾規(guī)則(默認沒有任何過濾規(guī)則),常見的安全過濾函數(shù)包括stripslasheshtmlentitieshtmlspecialcharsstrip_tags等,請根據(jù)業(yè)務(wù)場景選擇最合適的過濾方法。

      如果需要獲取多個數(shù)據(jù),建議使用only方法指定需要獲取的變量名稱,避免有些不懷好意的數(shù)據(jù)提交導(dǎo)致權(quán)限問題。

      public function index(Request $request) { // 指定表單數(shù)據(jù)名稱 $data = $request->only([\'name\',\'title\']); } 

      當你使用數(shù)據(jù)庫或者模型操作寫入數(shù)據(jù)的時候,也可以指定字段,避免非法和不希望的字段寫入數(shù)據(jù)庫。

      // 模型 User::allowField([\'name\',\'title\']) ->save($data); // 數(shù)據(jù)庫 Db::name(\'user\') ->field([\'name\',\'title\']) ->insert($data); 

      模型還有一個只讀字段的功能能避免你的數(shù)據(jù)受到外部的修改。

      上傳檢測

      網(wǎng)站的上傳功能也是一個非常容易被攻擊的入口,所以對上傳功能的安全檢查是尤其必要的。

      系統(tǒng)的think\\File類提供了文件上傳的安全支持,包括對文件后綴、文件類型、文件大小以及上傳圖片文件的合法性檢查,確保你已經(jīng)在上傳操作中啟用了這些合法性檢查,可以參考手冊的上傳章節(jié)

      SQL注入

      ThinkPHP的查詢統(tǒng)一使用了PDOprepare預(yù)查詢和參數(shù)綁定機制,能有效的避免SQL注入的發(fā)生。但不代表絕對安全,如果你缺乏良好的代碼規(guī)范,仍然有可能被利用。

      一個最簡單的原則就是不要讓用戶決定你的查詢條件(或者字段排序)和控制你的查詢數(shù)據(jù)。

      對于一些字符串的查詢條件(包括原生查詢)或者特殊的查詢(包括ORDER部分),需要手動進行參數(shù)綁定。

      // 錯誤的 Db::query("select * from think_user where id=$id AND status=$statis"); // 正確的 Db::query("select * from think_user where id=? AND status=?", [ $id, $status]); // 正確的 Db::execute("update think_user set name=:name where status=:status", [ \'name\' => \'thinkphp\', \'status\' => 1 ]); 

      對于使用了whereExpwhereRaw方式的查詢,你也需要使用參數(shù)綁定。

      Db::name(\'user\') ->whereRaw(\'id > ? AND status = ?\',[10, 1]) ->select(); 

      使用驗證器

      對于大量的表單需要驗證的情況,建議使用驗證器功能統(tǒng)一進行數(shù)據(jù)的合規(guī)驗證。驗證器的驗證操作應(yīng)該在控制器或者路由階段使用validate方法進行處理,模型的數(shù)據(jù)驗證功能新版已經(jīng)取消不再建議使用,模型和數(shù)據(jù)庫操作的時候應(yīng)該傳入經(jīng)過安全處理過的數(shù)據(jù)。

      XSS攻擊

      跨站腳本攻擊(cross-site ing,簡稱 XSS),XSS是一種在web應(yīng)用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。

      在渲染輸出的頁面中,要對一些數(shù)據(jù)進行安全處理,防止被惡意利用造成XSS攻擊,如果是5.1版本的話,所有的輸出都已經(jīng)經(jīng)過了htmlentities 轉(zhuǎn)義輸出,確保安全。如果是5.0版本的話,你可以自定義一個xss過濾函數(shù),在模板文件中對一些關(guān)鍵內(nèi)容變量進行函數(shù)處理。

      CSRF_132" style="box-sizing:inherit;margin:-10px 0px 0px;padding:0px;color:#009A61;position:absolute;">CSRF

      CSRF 跨站請求偽造是 Web 應(yīng)用中最常見的安全威脅之一,攻擊者偽造目標用戶的HTTP請求,然后此請求發(fā)送到有CSRF漏洞的網(wǎng)站,網(wǎng)站執(zhí)行此請求后,引發(fā)跨站請求偽造攻擊。攻擊者利用隱蔽的HTTP連接,讓目標用戶在不注意的情況下單擊這個鏈接,由于是用戶自己點擊的,而他又是合法用戶擁有合法權(quán)限,所以目標用戶能夠在網(wǎng)站內(nèi)執(zhí)行特定的HTTP鏈接,從而達到攻擊者的目的。

      開啟表單令牌驗證,盡量開啟強制路由并嚴格規(guī)范每個URL請求,定義單獨的MISS路由規(guī)則。

      遵循請求類型的使用規(guī)范并做好權(quán)限驗證,刪除操作必須使用DELETE請求,數(shù)據(jù)更改操作必須使用POSTPUT 或者 PATCH 請求方法,GET請求不應(yīng)該更改任何數(shù)據(jù)。

      會話劫持

      會話劫持是指攻擊者利用各種手段來獲取目標用戶的session id。一旦獲取到session id,那么攻擊者可以利用目標用戶的身份來登錄網(wǎng)站,獲取目標用戶的操作權(quán)限。

      有效的防護策略包括:

      在每次會話啟動的時候,調(diào)用regenerate方法。

      Session::start(); Session::regenerate(true); 

      更改session配置參數(shù),開啟安全選項:

      \'use_trans_sid\' => 0, \'httponly\' => true, \'secure\' => true, 

      升級到安全版本

      官方會對一些安全隱患和潛在漏洞進行修復(fù),并且發(fā)布一個更為安全的版本。請確認你升級到更安全的版本,確保底層的安全和健壯性。

      目前各個版本的建議版本如下:

      大版本 安全建議版本
      3.2 3.2.4+
      5.0 5.0.21+
      5.1 5.1.25+

      關(guān)注官方的公眾號和開發(fā)者周刊,注意最新的安全更新。

      業(yè)務(wù)邏輯安全

      這個屬于應(yīng)用層面的安全,很多漏洞源于某個業(yè)務(wù)邏輯自身的安全隱患,包括沒有做合理的數(shù)據(jù)驗證和權(quán)限檢查,尤其是涉及資金及財務(wù)層面的,一定要做更多的安全檢查,并且開啟事務(wù)。一個好的建議是更多的對應(yīng)用進行分層設(shè)計,減少每層的復(fù)雜性,獨立的分層設(shè)計便于提高安全性。

      服務(wù)器安全

      最后一點是運維階段需要特別注意的,及時更新服務(wù)器的安全補丁,確保沒有可利用的公開系統(tǒng)漏洞,包括你的數(shù)據(jù)庫系統(tǒng)安(尤其是數(shù)據(jù)備份工作)。

      百恒網(wǎng)絡(luò),專業(yè)專注于南昌小程序開發(fā)、南昌APP開發(fā),南昌網(wǎng)站建設(shè),為用戶提供高品質(zhì)網(wǎng)絡(luò)產(chǎn)品和優(yōu)質(zhì)服務(wù)是我們始終的追求,歡迎來電咨詢洽談
      400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
      掃一掃打開百恒網(wǎng)絡(luò)小程序

      歡迎您的光顧,我們將竭誠為您服務(wù)×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務(wù) 售后服務(wù)
       
      售后服務(wù) 售后服務(wù)
       
      備案專線 備案專線
       
      ×
      国产日韩一区二区三区在线播放 | 国产成人精品日本亚洲11| 在线涩涩免费观看国产精品| mm1313亚洲精品国产| 亚洲AV日韩AV天堂一区二区三区| 日韩精品视频美在线精品视频| 四虎亚洲精品高清在线观看| 久久精品国产亚洲AV高清热| 无码国产精品一区二区免费模式| 国产亚洲精品无码成人| 热久久这里是精品6免费观看| 国产乱码精品一区二区三| www.亚洲精品.com| 黄大色黄美女精品大毛片| 亚洲欧美国产日韩av野草社区| 中文字幕日韩一区二区三区不| 国产国产成人久久精品杨幂| 国产精品久久精品福利网站| 国产精品高清在线观看93| 精品一区二区久久久久久久网精| 国产精品无码免费播放| 精品无人区麻豆乱码1区2区新区 | 精品国产系列在线观看| 亚洲精品天堂成人片AV在线播放| 无码成人精品区在线观看| 无码成人精品区在线观看| 无码国产精品一区二区免费| 国产精品1024| 91麻豆国产精品91久久久| 国产 精品 自在 线| 内射精品无码中文字幕| 人妻少妇精品久久久久久| 国产精品99久久久久久| 韩国精品一区视频在线播放 | 久久久久人妻精品一区三寸蜜桃| 精品国产国产综合精品| 精品多毛少妇人妻AV免费久久| 国产偷国产偷高清精品| 99久久婷婷免费国产综合精品| 亚洲精品无码国产| 亚洲处破女AV日韩精品|