هل تريد تعقيم HTML قبل تخزينه في قاعدة البيانات أو قبل العرض؟(مكتبة AntiXSS في ASP.NET)

StackOverflow https://stackoverflow.com/questions/2060923

سؤال

لدي محرر يتيح للمستخدمين إضافة HTML المخزن في قاعدة البيانات ويتم عرضه على صفحة الويب.نظرًا لأن هذا مدخل غير موثوق به، فإنني أخطط لاستخدامه Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment لتطهير HTML.

  • هل يجب علي إجراء عملية التطهير قبل الحفظ في قاعدة البيانات أو قبل تقديم المدخلات غير الموثوق بها إلى صفحة الويب؟
  • هل هناك ميزة في تضمين كود مصدر AntiXSS في مشروعي بدلاً من DLL فقط؟(ربما يمكنني تخصيص القائمة البيضاء؟)
  • ما هو ملف الفئة الذي يجب أن أبحث عنه للتنفيذ الفعلي لـ GetSafeHtmlFragment
هل كانت مفيدة؟

المحلول

أنا لا أتفق مع الإجابة المختارة لسببين

  1. إذا قمت بتخزين بيانات مشفرة، فيجب عليك اختيار برنامج تشفير قبل تخزينها.ماذا يحدث إذا قمت بتخزين شيء ما بتنسيق HTML ولكنك تريد أيضًا نشره بتنسيق آخر، على سبيل المثال كاستجابة JSON، أو كجزء من مستند XML؟لديك الآن تنسيق HTML مشفر، ويجب عليك فك تشفيره، ثم تشفيره بالتنسيق الصحيح.
  2. ماذا لو اكتشفنا خطأً في برامج التشفير وطرحنا إصدارًا جديدًا؟الآن، نظرًا لأنك لا تقوم بالتشفير عند نقطة الإخراج، فقد تحتوي جميع بياناتك القديمة على أشياء تم تشفيرها بشكل غير صحيح.يمكنك التشفير مرة أخرى، ولكن بعد ذلك تواجه مشكلات في التشفير المزدوج والتي قد يكون من الصعب تصفيتها بشكل صحيح.

بشكل عام، تقوم بالتشفير عند نقطة الإخراج وتعامل أي بيانات قادمة من مخزن البيانات على أنها غير موثوق بها افتراضيًا - بعد كل شيء، ماذا لو تمكن شخص ما من تحرير قاعدة البيانات الخاصة بك مباشرة أو عبر حقن SQL؟

نصائح أخرى

استمع إلى بودكاست OWASP 67 مع جيف ويليامز على XSS.يتحدث عن عدم التعقيم أو التشفير قبل التخزين.السبب الرئيسي هو أنه إذا (عندما) تطورت المكتبات استجابةً لنقاط الضعف الجديدة، فستظل بياناتك عالقة في الإصدار القديم.بالطبع هذا لا يمنعك من تشغيل أي إدخال مقابل القائمة البيضاء عند نقطة الدخول ورفض أي شيء خارج النطاق المقبول.

  • كلاهما
  • فقط إذا كنت تخطط لتغييره، وهو ما لن أفعله شخصيًا
  • فئة AntiXss (نظرًا لأنها تسمى باسم AntiXss.GetSafeHtmlFragment())

يمكنك استخدام المعلمة في توجيه الصفحة طلب التحقق من الصحة = "صحيح".بهذه الطريقة يتم التحقق من صحة جميع بيانات الطلب وإذا كانت هناك مشكلة في التحقق من الصحة، فيمكنك دائمًا اكتشاف الخطأ.كما يمنع أيضًا خيوط حقن SQL وغيرها وليس فقط XSS الممكنة.

باستخدام البيانات الرقمية، يمكنك التحقق من تجاوز الأعداد الصحيحة أو سوء استخدام أنواع البيانات باستخدام Int32.TryParse() أو أي عائلة أخرى من عائلة TryParse (Byte.TryParse Int16.TryParse...)

لا داعي لاستخدام أي فئة أخرى أو طريقة تعقيم إضافية.

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