摘要:PHP 函數中的 CSRF 攻擊可透過使用令牌防禦:產生唯一令牌並儲存在會話或 cookie 中。將令牌包含在受保護表單中作為隱藏欄位。處理表單提交時,驗證令牌是否與儲存的令牌相符。不符則拒絕要求。
如何防禦PHP 函數中的CSRF 攻擊
跨站點請求偽造(CSRF) 是一種惡意技術,它允許攻擊者透過受害者的瀏覽器發送欺騙性請求。對於 PHP 應用程式來說,這可能會使攻擊者利用某些函數執行未經授權的操作。
實戰案例:
假設您有一個 PHP 應用程序,其中包含一個允許使用者更改密碼的函數 change_password
。函數使用以下程式碼:
<?php if (isset($_POST['password'])) { $password = $_POST['password']; // 更新数据库中的密码... } ?>
此程式碼容易受到CSRF 攻擊,因為攻擊者可以向受害者的瀏覽器發送POST 請求,其中包含他們希望用於受害者密碼的password
參數。這種攻擊可以透過欺騙性的電子郵件、惡意網站或其他方法來實現。
防禦措施:
為了防禦 CSRF 攻擊,需要實作機制來驗證請求的真實性。一種常用的方法是使用令牌。
建立一個唯一的且難以猜測的令牌,並將其儲存在會話或 cookie 中。
<?php session_start(); // 生成令牌并将其存储在会话中 $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); ?>
在要保護的表單中,將令牌包含為隱藏欄位。
<form action="change_password.php" method="post"> <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" /> <!-- 其他表单字段 --> </form>
在處理表單提交時,驗證令牌是否與會話或 cookie 中儲存的令牌相符。如果不匹配,則拒絕請求。
<?php if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { // 令牌验证失败,拒绝请求 exit('Invalid request'); } ?>
透過實施這些防禦措施,您可以降低 PHP 應用程式遭受 CSRF 攻擊的風險。
以上是如何防止 PHP 函數受到 CSRF 攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!