Cross Site Request Forgery

از Secure Coding

آسیب پذیری جعل درخواست کاربر یا Cross-Site Request Forgery (CSRF)، به جعل درخواست های دارای احراز هویت یا احراز هویت نشده کاربر را گویند.

در این آسیب پذیری هدف درخواست توسط مهاجم تغییر پیدا می نماید.

برای مثال مهاجم با ارسال فرم حاوی درخواست تغییر کلمه عبور مدیر اپلیکیشن، کلمه عبور مدیریت را بدون اطلاع مدیر ویرایش می نماید.

نمونه فرم آسیب پذیر:[ویرایش]

<form method="post" action="process.php">
  <input type="text" name="username">
  <input type="password" name="password">
  <button type="submit">Login</button>
</form>

روش های جلوگیری[ویرایش]

روش های جلوگیری در PHP[ویرایش]

۱) ایجاد توکن تصادفی برای درخواست ها

ایجاد مقدار تصادفی در فرم:

<?php
// Generate CSRF token
$csrf_token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $csrf_token;
?>

<form method="post" action="process.php">
  <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>">
  <input type="text" name="username">
  <input type="password" name="password">
  <button type="submit">Login</button>
</form>

بررسی صحت مقدار ارسالی در سمت سرور

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    // CSRF token mismatch
    die('Invalid CSRF token');
  }

  // Process login request
  $username = $_POST['username'];
  $password = $_POST['password'];
  // ...
}