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

Blocking javascript URLs in Links منع روابط javascript الخبيثة في href

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

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

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

لا يكفي استدعاء htmlspecialchars() على رابط أدخله المستخدم داخل <a href="...">؛ لأن الرابط الخبيث javascript:alert(1) لا يحتوي أصلاً على أي رموز خاصة في HTML!

  • عندما ينقر المستخدم على رابط يبدأ بـ javascript:... داخل href، ينفذ المتصفح كود JavaScript فوراً.
  • حلل دائماً الروابط المدخلة عبر parse_url($url, PHP_URL_SCHEME) واسمح فقط ببروتوكولي http وhttps في القائمة البيضاء.
  • تحقق كذلك من صحة بناء الرابط الكامل عبر filter_var($url, FILTER_VALIDATE_URL) قبل عرضه.

تستخرج دالة safeUrl() بروتوكول الرابط، وترفض أي شيء غير http أو https بإرجاع "#"، ثم ترمّز الرابط الصالح.

مخطط تدفق التنفيذ العملي لقسم منع روابط javascript الخبيثة في href في لغة PHP
PHP
<?php
function safeUrl(string $url): string {
    $scheme = strtolower((string) parse_url($url, PHP_URL_SCHEME));
    if (!in_array($scheme, ['http', 'https'], true)) {
        return '#';
    }
    return htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
}

echo "Attack : " . safeUrl("javascript:alert(1)") . "\n";
echo "Valid  : " . safeUrl("https://closetag.com/php") . "\n";