現在自己寫程式都已經使用 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
}
留言
張貼留言