CodeIgniter

CodeIgniter 是一個輕量級的 MVC 框架。我將首先討論 CodeIgniter 3,因為它與之前的版本有很大的不同。

在本指南中,我將分享一些在 CodeIgniter 應用程式中實現 Shieldon 防火牆的技巧。

CodeIgniter 框架中的防火牆

安裝

使用 PHP Composer:

composer require shieldon/shieldon

這也會安裝 Shieldon 所需的相依套件:

實作

  • CodeIgniter 3
  • CodeIgniter 4

CodeIgniter 3

CodeIgniter 3 有一個名為 CI_Controller 的核心控制器,用於處理其 MVC(模型-視圖-控制器)架構。

我強烈建議在 core 資料夾中創建一個名為 MY_Controller 的父控制器,並在其中添加初始程式碼。

1. MY_Controller

讓我們在 core 資料夾中創建一個名為 MY_Controller.php 的檔案。

class MY_Controller extends CI_Controller
{
    /**
     * Constructor.
     */
    public function __construct()
    {
        parent::__construct();
    }
}

2. 初始化防火牆實例

將初始程式碼放在建構函式中,這樣任何擴展 MY_Controller 的控制器都將初始化 Shieldon 防火牆並可使用 $this->firewall() 方法。

class MY_Controller extends CI_Controller
{
    /**
     * Constructor.
     */
    public function __construct()
    {
        parent::__construct();

        // Composer 自動載入程式
        require_once APPPATH . '../vendor/autoload.php';

        // 這個目錄必須具有寫入權限。
        $storage = APPPATH . 'cache/shieldon_firewall';

        $firewall = new \Shieldon\Firewall\Firewall();
        $firewall->configure($storage);

        // 控制面板的基本 URL。
        $firewall->controlPanel('/firewall/panel/');

        $response = $firewall->run();

        if ($response->getStatusCode() !== 200) {
            $httpResolver = new \Shieldon\Firewall\HttpResolver();
            $httpResolver($response);
        }
    }

    /**
     * Shieldon 防火牆保護。
     */
    public function firewall()
    {
        $firewall = \Shieldon\Container::get('firewall');
        $firewall->run();
    }
}

提醒

為了達到最佳的安全性,系統和應用程式資料夾應該放在網站根目錄之上,以免通過瀏覽器直接訪問。

如果你的應用程式資料夾與 index.php 位於相同層級,請將 $storage 目錄移至安全位置。例如:

$storage =  APPPATH . '../shieldon';

3. 定義控制面板的控制器

我們需要一個控制器來進入 Shieldon 防火牆控制面板,在這個範例中,我們定義一個名為 Firewall 的控制器。

class Firewall extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * 這是我們的防火牆面板的進入點。
     */
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

現在,你可以使用以下 URL 來訪問防火牆控制面板:

https://yoursite.com/firewall/panel/

CodeIgniter 4

1. 註冊過濾器

在你的 app/Config/Filters.php 檔案中,將以下程式碼添加到 $aliases 屬性:

'firewall' => \Shieldon\Firewall\Intergration\CodeIgniter4::class,

接下來,在 before 陣列中的 $globals 屬性中加入字串 firewall

public $globals = [
    'before' => [
        'firewall'
    ],
];

2. 定義防火牆面板的控制器

<?php 

namespace App\Controllers;

class Firewall extends BaseController
{
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->csrf([csrf_token() => csrf_hash()]);
        $panel->entry();
    }
}

就這樣!

你可以在 /firewall/panel 訪問防火牆控制面板。要查看頁面,請在瀏覽器中前往該 URL。

控制面板

https://yoursite.com/firewall/panel/

預設的登入帳號是 shieldon_user,密碼是 shieldon_pass。登入防火牆控制面板後,你應該首先更改登入帳號和密碼。

如果在「守護程式」設定部分中啟用了 Shieldon 防火牆,它將開始監控你的網站。請確保已正確設定這些設定。