سؤال

أنا أبحث عن مُطهر HTML بسيط مكتوب بلغة JavaScript.لا يلزم أن يكون آمنًا بنسبة 100% عبر XSS.

أقوم بتنفيذ Markdown ومحرر WMD Markdown (فرع SO الرئيسي من github) على موقع الويب الخاص بي.المشكلة هي أن HTML المعروض في المعاينة المباشرة لا تتم تصفيته، كما هو الحال هنا في SO.أنا أبحث عن مُطهر HTML بسيط/سريع مكتوب بلغة JavaScript حتى أتمكن من تصفية محتويات نافذة المعاينة.

لا حاجة لمحلل كامل مع حماية XSS كاملة.لا أقوم بإرسال الإخراج مرة أخرى إلى الخادم.أقوم بإرسال Markdown إلى الخادم حيث أستخدم مُطهر HTML كاملًا ومناسبًا قبل تخزين النتيجة في قاعدة البيانات.

جوجل أصبحت عديمة الفائدة على الإطلاق بالنسبة لي.لقد حصلت للتو على مئات المقالات (غير الصحيحة غالبًا) حول كيفية تصفية جافا سكريبت من HTML الذي أنشأه المستخدم في جميع أنواع اللغات من جانب الخادم.

تحديث

سأشرح بشكل أفضل قليلاً لماذا أحتاج إلى هذا.يحتوي موقع الويب الخاص بي على محرر مشابه جدًا للمحرر الموجود هنا في StackOverflow.توجد منطقة نصية لإدخال صيغة MarkDown ونافذة معاينة أسفلها توضح لك كيف ستبدو بعد إرسالها.

عندما يرسل المستخدم شيئًا ما، يتم إرساله إلى الخادم بتنسيق MarkDown.يقوم الخادم بتحويله إلى HTML ثم يقوم بتشغيل مطهر HTML عليه لتنظيف HTML.يسمح MarkDown بـ HTML التعسفي لذا أحتاج إلى تنظيفه.على سبيل المثال، يكتب المستخدم شيئا مثل هذا:

<script>alert('Boo!');</script>

لا يلمسه محول MarkDown لأنه HTML.سيقوم مطهر HTML بتجريده حتى يختفي عنصر البرنامج النصي.

ولكن هذا ليس ما يحدث في نافذة المعاينة.تقوم نافذة المعاينة بتحويل MarkDown إلى HTML فقط ولكنها لا تقوم بتطهيره.لذلك، ستحتوي نافذة المعاينة على عنصر نصي. وهذا يعني أن نافذة المعاينة مختلفة عن العرض الفعلي على الخادم.

أريد إصلاح هذه المشكلة، لذا أحتاج إلى أداة تعقيم HTML سريعة وقذرة لـ JavaScript.شيء بسيط مع القائمة السوداء للعنصر/السمات الأساسية والقائمة البيضاء سيفي بالغرض.لا يلزم أن يكون XSS آمنًا لأن حماية XSS تتم بواسطة مطهر HTML من جانب الخادم.

هذا فقط للتأكد من أن نافذة المعاينة سوف تتطابق مع العرض الفعلي بنسبة 99.99% من الوقت، وهو أمر جيد بما فيه الكفاية بالنسبة لي.

هل يمكنك المساعدة؟شكرا لك مقدما!

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

المحلول

يجب عليك إلقاء نظرة على ما يوصى به في هذا السؤال تعقيم/إعادة كتابة HTML من جانب العميل

وللتأكد من أنك لا تحتاج إلى القيام بالمزيد بشأن XSS، يرجى مراجعة الإجابات على هذا السؤال كيفية منع هجمات حقن جافا سكريبت داخل HTML الذي أنشأه المستخدم

نصائح أخرى

لقد قمنا بتطوير HtmlSantizer بسيط وجعلناه مفتوح المصدر هنا: https://github.com/jitbit/HtmlSanitizer

الاستخدام

var result = HtmlSanitizer.SanitizeHtml(input);

[تنصل!أنا أحد المؤلفين!]

بالنسبة لوظيفتي، فقد اهتمت فقط بأن السلسلة ليست فارغة وتحتوي على أحرف أبجدية رقمية فقط.يستخدم هذا JS عادي ولا توجد مكتبات ثالثة أو أي شيء.إنه يحتوي على regex طويل ، لكنه يقوم بالمهمة ؛) يمكنك البناء على هذا ولكن هل لديك regex يكون شيئًا أكثر تشابهًا "<script> | </script>" (مع هروب الشخصيات عند الضرورة ، ويندم المساحات).;)

    var validateString = function(string) {

      var validity = true;

      if( string == '' ) { validity = false; }

      if( string.match( /[ |<|,|>|\.|\?|\/|:|;|"|'|{|\[|}|\]|\||\\|~|`|!|@|#|\$|%|\^|&|\*|\(|\)|_|\-|\+|=]+/ ) != null ) {

          validity = false;
      }

      return validity;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top