سؤال

بعد أن قمت بتنفيذ وظائف التعقيم الخاصة بي (وفقًا للتفاصيل المطلوبة) ، قرر مديري تغيير المدخلات المقبولة. الآن يريد الاحتفاظ ببعض العلامات المحددة وسماتها. اقترحت تنفيذ لغة تشبه BBCode وهي IMHO أكثر أمانًا ، لكنه لا يريد ذلك لأنه سيكون من العمل كثيرًا.

هذه المرة أود أن أبقي الأمر بسيطًا حتى لا أقتله في المرة القادمة التي يطلب مني فيها تغيير هذا الشيء مرة أخرى. وأنا أعلم أنه سوف.

هل يكفي استخدام أولاً strip_tags مع معلمة العلامة للحفاظ عليها ثم htmlentities?

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

المحلول

strip_tags لا يؤدي بالضرورة إلى محتوى آمن. strip_tags تليها htmlentities سيكون آمنًا ، حيث أن أي شيء ترميز HTML آمن ، لكنه لا معنى له.

إما أن يقوم المستخدم بإدخال نص عادي ، وفي هذه الحالة يجب إخراجه باستخدام htmlspecialchars (في التفضيل إلى htmlentities) ، أو يقومون بإدخال علامة HTML ، وفي هذه الحالة تحتاج إلى تحليلها بشكل صحيح ، وإصلاح العلامات المكسورة وإزالة العناصر/السمات التي ليست في قائمة آمنة.

إذا كان هذا هو ما تريده ، فاستخدم مكتبة موجودة للقيام بذلك (على سبيل المثال. htmlpurifier). لأنها ليست مهمة تافهة ، وإذا أخطأت ، فقد أعطيت نفسك ثقوب أمان XSS.

نصائح أخرى

يمكنك الاحتفاظ بعلامات محددة باستخدام strip_tags مع هذا بناء الجملة: strip_tags($text, '<p><a>');

هذا المقتطف من شأنه تجريد جميع العلامات إلا p و a. يتم الاحتفاظ بالسمات للعلامات التي سمحت بها (p و a في المثال أعلاه).

ومع ذلك ، هذا لا يعني أن السمات آمنة. هل يريد سمات محددة أم أنه يريد الاحتفاظ بها جميعًا على العلامات المسموح بها؟ بالنسبة للحالة الأولى ، ستحتاج إلى تحليل كل علامة وإزالة تلك المطلوبة ، وتعقيم القيم. للحفاظ على جميع السمات على العلامات المسموح بها ، لا تزال بحاجة إلى تعقيمها. أود أن أوصي بالركض htmlentities على قيم السمة لتعقيمها (للعرض ، سأفترض).

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