سؤال

هل هناك أي مشاكل مع ما أفعله هنا؟ هذه هي المرة الأولى التي أتعامل فيها مع شيء من هذا القبيل ، وأريد فقط التأكد من فهم كل المخاطر ، وما إلى ذلك لطرق مختلفة.

أنا أستخدم WMD للحصول على إدخال المستخدم ، وأنا أعرضه مع عنصر تحكم حرفي. نظرًا لأنه غير قابل للدخول بمجرد دخوله ، سأقوم بتخزين HTML وليس التمييز ،

input = Server.HTMLEncode(stringThatComesFromWMDTextArea)

ثم قم بتشغيل شيء مثل ما يلي للعلامات التي أريد أن يتمكن المستخدمون من استخدامه.

// Unescape whitelisted tags.
string output = input.Replace("&lt;b&gt;", "<b>").Replace("&lt;/b&gt;", "</b>")
                     .Replace("&lt;i&gt;", "<i>").Replace("&lt;/i&gt;", "</i>");

تعديل هذا ما أفعله حاليًا:

 public static string EncodeAndWhitelist(string html)
 {
     string[] whiteList = { "b", "i", "strong", "img", "ul", "li" };
     string encodedHTML = HttpUtility.HtmlEncode(html);
     foreach (string wl in whiteList)
         encodedHTML = encodedHTML.Replace("&lt;" + wl + "&gt;", "<" + wl + ">").Replace("&lt;/" + wl + "&gt;", "</" + wl + ">");
     return encodedHTML;
 }
  1. هل سيبقي ما أفعله هنا محميًا من XSS?
  2. هل هناك أي اعتبارات أخرى يجب تقديمها؟
  3. هل هناك قائمة جيدة من العلامات العادية إلى القائمة البيضاء؟
هل كانت مفيدة؟

المحلول

إذا كانت متطلباتك هي الأساسية حقًا بحيث يمكنك القيام بدائل السلسلة البسيطة ، فهذا "آمن" مقابل XSS. (ومع ذلك ، لا يزال من الممكن تقديم محتوى غير بئر حيث <i> و <b> تكون خاطئًا أو غير مغلفة ، والتي يمكن أن تعبث في الصفحة التي ينتهي بها المحتوى.

ولكن هذا نادرا ما يكفي. على سبيل المثال حاليا <a href="..."> أو <img src="..." /> ليست مسموحة. إذا كنت ترغب في السماح لهذه العلامات أو أي علامة أخرى مع قيم السمات ، فسيكون لديك المزيد من العمل للقيام به. يمكنك بعد ذلك التعامل معها مع Regex ، ولكن هذا يمنحك مشاكل لا نهاية لها مع التعشيش العرضي واستبدال المحتوى الذي تم إعادة تكوينه بالفعل ، مع رؤية كيف لا يمكن لـ Regex تحليل HTML ، وذلك.

لحل كلتا المشكلتين ، يتمثل النهج المعتاد في استخدام محلل [X] [HT] ML على المدخلات ، ثم المشي في DOM لإزالة جميع العناصر والسمات المعروفة ، ثم إعادة تخصيصها أخيرًا إلى [X] HTML. ثم يتم ضمان النتيجة بشكل جيد وتحتوي على محتوى آمن فقط.

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