django code - تعطيل HTML الهروب في TextField دجانجو




weschool tutorials (4)

كيف يمكنني إيقاف تشغيل HTML التلقائي لـ Django ، عند الكتابة في TextField للنموذج؟


Answers

مجرد استخدام مرشح safe django ل. في القالب الخاص بك ، يمكنك فعل شيء كالتالي:

{{ instance.my_text_field|safe }}

أعتقد أن الطريقة الأفضل لفعل ذلك كما يصفهاDaniel Vassallo.

لماذا ا؟

لأنه بهذه الطريقة ، يمكنك إجراء بعض عمليات الأمان على رمز HTML الذي تريد عرضه دون الهروب ، خاصة للحماية من البرمجة النصية للموقع عبر ( XSS ).

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

هنا:

from django.utils.safestring import mark_safe 

class MyModel(models.Model): 
    my_textfield = models.TextField()
    is_malisious = models.BooleanField(default=False)

    def display_my_safefield(self):
        if '<script>' in self.my_textfield:
            self.is_malicious = True
            self.save()
            return self.my_textfield
        return mark_safe(self.my_textfield)

وكل هذا لا يحتاج إلى أي عمليات ترحيل إلى قاعدة البيانات.

طريقه بديله

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


إحدى الطرق للقيام بذلك هي وضع وظيفة في النموذج الخاص بك والتي ترجع البيانات المميزة بأنها آمنة:

from django.utils.safestring import mark_safe 

class MyModel(models.Model): 
    my_textfield = models.TextField()

    def display_my_safefield(self): 
        return mark_safe(self.my_textfield)

ثم في القالب ، سيكون عليك استخدام:

{{ instance.display_my_safefield }}

إجابة:

  • سيحاول المستعرض تحويل chucknorris إلى قيمة سداسية عشرية.
  • بما أن c هي الحرف السداسي الوحيد الصحيح في chucknorris ، تتحول القيمة إلى: c00c00000000 ( 0 لكافة القيم غير الصالحة ).
  • ثم يقسم المتصفح النتيجة إلى 3 مجموعات: Red = c00c ، Green = 0000 ، Blue = 0000 .
  • نظرًا لأن القيم السداسيّة الصالحة لخلفيات html تحتوي فقط على رقمين لكل نوع من أنواع الألوان ( r ، g ، b ) ، يتم اقتطاع آخر رقمين من كل مجموعة ، مع ترك قيمة rgb هي c00000 وهو لون ذو لون أحمر مائل إلى الطوب.




html django django-models textfield