Jinja: يعد Autoescaping المعطل افتراضيًا افتراضيًا خطيرًا

تم إنشاؤها على ٦ يناير ٢٠١٦  ·  4تعليقات  ·  مصدر: pallets/jinja

اكتشفت اليوم من خلال XSS تم الإبلاغ عنه خارجيًا أن Jinja لا يقوم بتشغيل autoescaping افتراضيًا. يعد هذا افتراضيًا خطيرًا ، وقد أصبح أكثر خطورة بسبب حقيقة أن العديد من الأشخاص قد تم تقديمهم إلى Jinja من خلال معرفتهم السابقة بقوالب Django ، والتي تم تمكين ميزة autoescaping افتراضيًا منذ عام 2007.

بالنظر إلى الإنترنت ، يبدو أن هذه الحقيقة ليست معروفة جيدًا. في الواقع ، لقد وجدت كتبًا (Python 3 Object Oriented Programming ، الفصل 12 ، ccbuchuki) التي توصي باستخدام jinja2 لمواقع الويب وتترك التصميم التلقائي مغلقًا. تظهر عينة عشوائية من مشاريع Github أيضًا أن معظم الأشخاص لا يضيفون autoescape = True أو الامتداد التلقائي إلى مشروعهم.

على الرغم من أنني أفهم أنه من المحتمل أن يكون الانتقال إلى وضع افتراضي أكثر أمانًا في تلك المرحلة أمرًا مزعجًا ، إلا أن التوثيق يجب أن يوضح على الأقل أن ميزة autoescaping معطلة بشكل افتراضي. ربما تضيف autoescape = True لجميع الأمثلة التي تنشئ كائن jinja2.Environment و / أو تضيف قسمًا مبكرًا في التوثيق.

docs

التعليق الأكثر فائدة

يبدو أنه مرشح جيد لطلب السحب :)

ال 4 كومينتر

Jinja ليس فقط لـ HTML ولكن محرك قالب للأغراض العامة. أعتقد أن معظم الناس يستخدمون Jinja in Flask ، والذي يمكّن autoescape افتراضيًا لقوالب HTML. إذا قمت بدمج محرك قالب في إطار العمل الخاص بك ، فمن المفترض أن تقرأ الوثائق الخاصة بكيفية استخدامه بأمان.

بعد قولي هذا ، أعتقد أن كونك واضحًا جدًا في المستندات أنه ربما يجب عليك استخدام autoescape عند إنشاء HTML يعد اقتراحًا جيدًا.

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

ولكي أكون صريحًا ، فإن توثيق Jinja ضعيف حقًا حول هذا الموضوع. هذا ما تراه لأول مرة عند فتح توثيق Jinja:

Jinja2 هي لغة قوالب حديثة وسهلة التصميم لبايثون ، على غرار قوالب Django. إنه سريع ، ومستخدم على نطاق واسع وآمن مع بيئة تنفيذ قالب الحماية الاختيارية:

"على غرار قوالب Django" و "آمن" يمكن أن يؤدي إلى الاعتقاد بأنه يحتوي على ميزات أمان قوالب Django مثل autoescaping.

ثم ، مثال ، وهو HTML. وبعد ذلك ، في قائمة الميزات:

نظام هروب HTML أوتوماتيكي قوي لمنع XSS

الذي لا يذكر أنه اختياري ولا يتم تمكينه افتراضيًا.

لا تُظهر صفحة مستندات "الاستخدام الأساسي لواجهة برمجة التطبيقات" إمكانية تمكين النسخ التلقائي ولكنها لا تعرض HTML أيضًا ، لذلك أعتقد أن هذا جيد. ولكن بعد ذلك عندما تنتقل إلى صفحة "الأساسيات" الخاصة بواجهة برمجة التطبيقات :

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
template = env.get_template('mytemplate.html')
print template.render(the='variables', go='here')

المثال الأول عرضة لـ XSSes التافهة. الناس على حق في الخلط.

يبدو أنه مرشح جيد لطلب السحب :)

لا يمكننا إيقاف هذا الآن دون كسر كود الجميع. ومع ذلك ، يسعدني تحديث المستندات وفقًا لذلك. سأغلق هذا باعتباره wontfix ولكن لا تتردد في فتح العلاقات العامة لتحديثات الوثائق.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات