انتقل إلى محتوى الدرس

Deleting Records via POST and CSRF حذف السجلات عبر طلب POST محمي بتوكن CSRF

اجمع التوجيه وحراسة المصادقة واستعلامات PDO المحضرة وتقسيم الصفحات وحماية CSRF وXSS في مشروع لوحة تحكم CRUD متكاملة بـ PHP 8.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

لا تحذف سجلات قاعدة البيانات أبداً عبر طلب GET (مثل ?action=delete&id=10)؛ بل ضع زر الحذف دائماً داخل نموذج <form method="POST"> محمي بتوكن CSRF وفحص الملكية.

  • روابط الحذف عبر GET قد تُستدعى عن طريق الخطأ من المتصفح أو عبر هجمات تزوير الطلبات.
  • تحقق من توكن CSRF ومن شرط الملكية WHERE id = :id AND user_id = :uid قبل تنفيذ الحذف.
  • اعرض نافذة تأكيد للمستخدم قبل إرسال نموذج الحذف.

يحذف استعلام DELETE المحضر المهمة 10 فقط بعد التأكد من ملكية المستخدم 42 لها.

PHP
<?php

$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE tasks (id INTEGER PRIMARY KEY, user_id INT, title TEXT)');
$pdo->exec("INSERT INTO tasks VALUES (10, 42, 'Temporary Task')");

$stmt = $pdo->prepare('DELETE FROM tasks WHERE id = :id AND user_id = :u');
$stmt->execute(['id' => 10, 'u' => 42]);

echo "Deleted Rows: " . $stmt->rowCount() . "\n";