شرح صفوف ومحتوى الفقرة
تتطلب السياقات المختلفة في الصفحة قواعد ترميز مناسبة لكل منها؛ فاحرص دائماً على إحاطة خصائص 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";