1、登錄驗證成功之后,在會話SESSION["user_token"]中保存Token。
2、在后台操作中,增刪改表單中添加隱藏域hidden,設置value為Token。
3、提交之后進行驗證Token是否正確。
簡化代碼演示:
Token驗證過程,從實踐中理解Token防御CSRF的過程。


1、session的工作原理
(1)首先使用session_start()函數進行初始換
(2)當執行PHP腳本時,通過使用$_SESSION超全局變量注冊session變量。
(3)當PHP腳本執行結束時,未被銷毀的session變量會被自動保存在本地一定路徑下的session庫中, 這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網頁時可以加載使用。
session_start()做了哪些初始化工作
(1)讀取名為PHPSESSID(如果沒有改變默認值)的cookie值,假使為abc123
(2)若讀取到PHPSESSID這個COOKIE,創建$_SESSION變量,並從相應的目錄中(可以再php.ini中設置)讀取SESS_abc123(默認是這種命名方式)文件,將字符裝在入$_SESSION變量中; 若沒有讀取到PHPSESSID這個COOKIE,也會創建$_SESSION變量,同時創建一個sess_abc321(名稱為隨機值)的session文件,同時將abc321作為PHPSESSID的cookie值返回給瀏覽器端。
2、$_SESSION變量基本用法
通過為每個獨立用戶分配唯一的會話 ID,可以實現針對不同用戶分別存儲數據的功能。 會話通常被用來在多個頁面請求之間保存及共享信息。 一般來說,會話 ID 通過 cookie 的方式發送到瀏覽器,並且在服務器端也是通過會話 ID 來取回會話中的數據。 如果請求中不包含會話 ID 信息,那么 PHP 就會創建一個新的會話,並為新創建的會話分配新的 ID。
會話的工作流程很簡單。當開始一個會話時,PHP 會嘗試從請求中查找會話 ID (通常通過會話 cookie), 如果請求中不包含會話 ID 信息,PHP 就會創建一個新的會話。 會話開始之后,PHP 就會將會話中的數據設置到 $_SESSION 變量中。 當 PHP 停止的時候,它會自動讀取 $_SESSION 中的內容,並將其進行序列化, 然后發送給會話保存管理器來進行保存。
默認情況下,PHP 使用內置的文件會話保存管理器(files)來完成會話的保存。 也可以通過配置項 session.save_handler 來修改所要采用的會話保存管理器。 對於文件會話保存管理器,會將會話數據保存到配置項 session.save_path 所指定的位置。
可以通過調用函數 session_start() 來手動開始一個會話。 如果配置項 session.auto_start 設置為1, 那么請求開始的時候,會話會自動開始。
PHP 腳本執行完畢之后,會話會自動關閉。 同時,也可以通過調用函數 session_write_close() 來手動關閉會話。
開始tmp文件夾空

原始用戶提交

提交后,session會話,生成的see文件

修改內容,利用修改的poc的html提交(本次使用scrf漏洞提交)


使用構造poc的html提交,服務器,返回失敗。
因為此時的token值 與 原用戶$_SESSION [ "user_token"]對不上。

提交后,session會話,都會在tmp文件夾上創建的see文件

參考資料:
https://blog.csdn.net/cs23405/article/details/81297698
