跳到主要內容

手工 PHP CSRF 實作

現在自己寫程式都已經使用 CodeIgniter4 的 PHP 套件,系統會自動使用資安防護機制,如網路表單會使用 CSRF (cross-site request forgery)的機制保護,以防止不合法的資料輸入或程式機器人入侵。

但在之前未使用 CI4 之前的程式,如果要防止相關資訊安全漏洞的話,必要自己手工增加 CSRF 防護。

CSRF 產生:

$_SESSION['token'] = md5(uniqid(mt_rand(), true));


在表單添加 CSRF 隱藏欄位:

<input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?? '' ?>">


在後續程序驗證 CSRF:

$token = filter_input(INPUT_POST, 'token', FILTER_SANITIZE_STRING);


if (!$token || $token !== $_SESSION['token']) {

    // return 405 http status code

    header($_SERVER['SERVER_PROTOCOL'] . ' 405 Method Not Allowed');

    exit;

} else {

    // process the form

}

留言

這個網誌中的熱門文章

IPv6系統(三):伺服器手動設定 & Fortigate SLAAC 設定

一、伺服器手動設定 機房的伺服分為 Ubuntu 及 Windows Server 系列兩種。Windows Server 具有圖形介面(GUI),且與 Win7、Win10 作業系統操作相似,相當容易設定。只要把 IP 相關資訊輸入即可。 Ubuntu linux 系統需要修改系統設定檔(/etc/network/interface) 二、Fortigate SLAAC 設定 以學校中 vlan192 為例,IPv6區段為 2001:288:102b:a5::/64 最主要是 config ipv6 之後的區段,set ip6-address 設定本機作為這個 vlan 的 IPv6 的 IP,set ip6-send-adv、set ip6-other-flag 開啟RA功能,並設定成 DHCP+SLAAC 動態 IPv6 環境。 因為採用 DHCP+SLAAC 的緣故,必須要有 DHCPv6 來發放 DNS 資訊,否則要每一台手動設定才能正確連接網路。 除此之外,Fortigate 上還需要針對 IPv6 做 Routing table 和 IPv6 Firewall Rule 的設定。

IPv6 系列(五):KEA DHCP SERVER

學校在純 IPv4 的環境時,採用 ISC-DHCP Server 來發放教學區域的私有 IP(10.10.xxx.xxx),並使用閘道 Fortigate 作 NAT 連接到 Internet。 採用 IPv6 後,原本是要使用 ISC-DHCPv6 來作為 IPv6 發放,結果 ISC-DHCPv6 架不起來。不過在查詢 DHCPv6 的過程中,發現 ISC(Internet System Consortium)已開發出下一代的 DHCP Server:Kea Dhcp Server。 Kea Dhcp Server 官網: https://www.isc.org/kea/ 摘錄  https://www.itread01.com/content/1548712273.html  對 Kea DHCP Server 的介紹: Kea DHCP Server 由 Internet Systems Consortium(ISC) 開發的開源 DHCPv4/DHCPv6 伺服器。Kea DHCP Server 是一個高效能的,可擴充套件的DHCP伺服器引擎。通過hooks library可以很容易的修改和擴充套件。 Kea包含的功能元件 keactrl — kea伺服器啟動,停止,配置重置和狀態查詢元件 kea-dhcp4 — DHCPv4伺服器程式,用於響應客戶端的DHCPv4查詢。 kea-dhcp6 — DHCPv6伺服器程式,用於響應客戶端的DHCPv6查詢。 kea-dhcp-ddns — DHCP動態DNS程式.這個程式在DHCP伺服器和DNS伺服器之間扮演者調解者。它接收來自DHCP伺服器域名更新請求和傳送DNS更新訊息給DNS伺服器。也就是說DDNS捕獲使用者每次變化的IP地址,然後將其與域名相對應,這樣其他上網使用者就可以通過域名來進行交流。而最終客戶所要記憶的全部,就是記住動態域名商給予的域名即可,而不用去管他們是如何實現的。 軟體執行環境 加密庫Botan或者OpenSSL log4cplus 1.0.3+ 如果有需要mysql,需要MySQL headers and libraries。可選(postgresql、cassandra類同) 選用 Kea DHCP Server 的原因,第一,提供 DHC

PHP + CI4 的 PhpSpreadsheet 的處理

0、需要用到的 Library use \PhpOffice\PhpSpreadsheet\Spreadsheet; use \PhpOffice\PhpSpreadsheet\Writer\Xlsx; use \PhpOffice\PhpSpreadsheet\Reader\Xlsx; use \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; 參考資料: Welcome to PhpSpreadsheet's documentation - PhpSpreadsheet Documentation  1、上傳 excel 檔案並讀取內容 //處理上傳 try {             $thefile = $this->request->getFile('theuploadfile'); } catch (\Exception $e) { echo $e; exit; } try { $path = $thefile->store(); } catch (\Exception $e) { echo $e; exit; } //確認檔案格式並讀取內容 $filename = WRITEPATH . 'uploads/' . $path; $fileext = ucfirst($thefile->getClientExtension()); if (in_array($fileext, array('Xls', 'Xlsx'))) { $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($fileext); $spreadsheet = $reader->load($filename); $sheet = $spreadsheet->getSheet(0); $data = $sheet->getCell('A1')->getValue(); } 2、產生 Excel 檔案 / /生成試算表並設定格式 $spreadsheet = new Spreadsheet(); $spreadsh