سؤال

في طلبي وأنا السماح للمستخدمين بتحميل أوراق الأنماط المغلق حتى يتمكنوا من تطبيقها على القوالب. هو مكتوب المغلق باعتبارها ورقة نمط الداخلية، لأنه في هذا الوقت لا أريد لفضح ورقة الأنماط المغلق للمستخدمين الآخرين.

وهذا يفسح المجال للمستخدمين لتشمل الشيفرات الخبيثة في ملف المغلق. في البداية كانت خطتي لتحويل جميع '<' و '>'، ولكن ما هو مطلوب في بناء الجملة المغلق. أنا بعد لائحة حل الأبيض، لأنه لن يكون من الممكن للقضاء على باستفاضة الشخصيات غير المرغوب فيها.

وأي اقتراحات لتنفيذ التدابير الأمنية لهذا السيناريو؟

هل كانت مفيدة؟

المحلول

ويجب عليك بالتأكيد أيضا تصفية ما لا يقل عن تعبيرات IE وFF -moz ملزم خصائص ... على حد سواء يمكن أن تستخدم لتشغيل (الخبيثة potentionally) جافا سكريبت باستخدام المغلق.

هذا الغش ورقة يحتوي على تكتيكات XSS الأكثر وضوحا، بما في ذلك بعض منها CSS.

وأسلم حل ربما يكون هيتليستينغ كما اقترحتم (اذا كان مقبولا للحد من المستخدمين لاستخدام فقط خصائص القائمة البيضاء).

نصائح أخرى

وأنا نفذت مرشح الذي يحل محل كل الحروف < إلى &lt;. والسبب هو أن CSS لا يحتاج الطابع <. الشخصية الوحيدة التي يحتاجها هو > الذي يستخدم لمحددات الطفل.

وهذا للمستخدمين وسيلة لا يمكن علامات مفتوحة لكتابة تعليمات برمجية ضارة.

وأنا أكثر من سعيدة للنظر في أي حلول أخرى / أفضل.

لا أميل السماح للمستخدمين بتحميل ملف CSS، وجعل واجهة إنشاء ملفات CSS تستند بشكل دينامي على الخيارات المحددة من قبل المستخدم. الخيارات التي تسمح. ثم يمكنك جعل ملف CSS fisical أو يمكنك تقديم طلب الديناميكي الذي يكتب CSS بناء على ذلك التكوين، وهذا تجنب لديها الكثير من ملفات CSS على الخادم ... نهجها آخر، وكنت لا تحتاج إلى التحقق من كل XSS POSIBLE استغلال ، لها أكثر من السهل تحديد ما هو مسموح من تحليل CSS ورفض بعض التعليمات البرمجية خطيرة.

استخدم CDATA والهروب تسلسل تنتهي (]]>). أنا لست متأكدا من متصفح التوافق، وإن كان.

مثال (غير مجربة):

<?PHP

function strReplaceAll($needle, $replacement, $haystack)
{
    // Check for infinite loop.  (NOT FOOL PROOF!)
    if(strpos($replacement, $needle) === FALSE)
        return;

    $numReplacements = 42;

    while($numReplacements)
    {
        $haystack = str_replace($needle, $replacement, $haystack, &$numReplacements);
    }

    return $haystack;
}

?>

<style type="text/css">
/*
<![CDATA[
*/

<?PHP echo sstrReplaceAll(']]>', '', $userCss); ?>

/*
]]>
*/
</style>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top