سؤال

لقد تم تحديث نظام صفحة الأعضاء وأحد المتطلبات هو السماح بالألوان الجريئة والخطوط والخطوط والروابط على بعض الحقول لكن لا حجم الخط أو النمط - كل هذا مع محرر wysiwyg. وقد تم ذلك في الأصل باستخدام Textarea وبعض الحد الأدنى من تصفية HTML IE <script> مع preg_replace(). مجنون وبالتأكيد غير آمن أعرف.

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

لقد انخرطت الآن مع فكرة استخدام BBCode مع محرر WYSIWYG ، لأن ذلك سيسمح لنا بالتقدم بأمان htmlspecialchars() على الإخراج ثم تكون مسيطرًا تمامًا على أي HTML يتم إنشاؤه باستخدام علامات BBCod nl2br() لكسر الخط.

المشكلة الوحيدة هي أنني سأضطر إلى ترميز شيء ما لتحويل إعداد HTML الحالي إلى BBCode.

استعلامي الرئيسي هو الخطوات المذكورة أعلاه مع BBCode ستكون كافية للحماية من هجمات XSS؟ أم أن هناك طريقة أكثر رشاقة/واضحة لأمن HTML يمكنني استخدامها؟

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

المحلول

يمكنك استخدام HTML تنقية مكتبة. إنه وزن ثقيل ، ولكنه يسمح قواعد مثل "السماح فقط بإعدادات الألوان في علامات النمط". تم اختباره بدقة وتطويره بنشاط.

نصائح أخرى

احفظ في HTML ، واستخدم محلل HTML المناسب (مثل Domdocument) للتخلص من العلامات الخطرة (مثل htmlspecialchars تنطبق العلامات الخطرة بدلاً من ذلك بشكل أعمى على عقد المحتوى بأكملها)

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