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

Escaping HTML Attributes and JavaScript تأمين القيم داخل خصائص HTML و JavaScript

اقضِ على ثغرات حقن السكريبتات العابرة للمواقع XSS في PHP 8 باستخدام htmlspecialchars وفحص الروابط ورؤوس الحماية القياسية.
1 صفوف تعليمية
PHP
0 مشاهدة

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

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

تتطلب السياقات المختلفة في الصفحة قواعد ترميز مناسبة لكل منها؛ فاحرص دائماً على إحاطة خصائص HTML بعلامات تنصيص، واستخدم json_encode() مع أعلام الترميز السداسي عند تمرير بيانات PHP إلى JavaScript.

  • أحِط قيم خصائص HTML دائماً بعلامات تنصيص مزدوجة value="<?= e($val) ?>"؛ لأن الخصائص غير المحاطة بعلامات تنصيص يمكن اختراقها بمجرد إضافة مسافة.
  • لا تطبع النصوص الخام داخل وسم <script> بالاعتماد على htmlspecialchars() وحدها.
  • استخدم json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT) أو مرر البيانات عبر خاصية data-*.

يحول العلم JSON_HEX_TAG الرمزين < و> إلى \u003C و\u003E، مما يمنع إغلاق وسم <script> المحيط.

PHP
<?php
$userData = [
    'username' => 'Sara </script><script>alert(1)</script>',
    'role'     => 'editor',
];

$safeJson = json_encode(
    $userData,
    JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT
);
echo "const APP_USER = $safeJson;\n";