2016-12-24 5 views
1

Ich möchte CKEditor für meine App verwenden, wo Benutzer (jedermann) Artikel veröffentlichen können, aber ich bin mir nicht sicher, ob es sicher ist. Ich muss den Text von CKEditor als 'Sicher' markieren, während ich in Django-Vorlagen rendere, um die erwarteten Ergebnisse zu erhalten. Gemäß der Django-Dokumentation ist es nicht empfehlenswert, den Eingabetext aus unbekannten Quellen zu deaktivieren. Sogar CKEditor erwähnt, dass die Eingabe ein sauberes HTML sein sollte.Serverseitige Validierung für CKEditor Benutzereingabe (Django)

Kann CKEditor für meinen Anwendungsfall verwendet werden? Wenn ja, brauche ich einige Vorschläge, um Sicherheitsprobleme zu vermeiden. Vielen Dank!

Antwort

2

Sie können ein CKEditor-Widget schreiben, das Ihre nicht vertrauenswürdigen Eingaben z. Bleach-Bibliothek nach dem Hinzufügen. Passen Sie Ihre Tags nach Ihren Bedürfnissen:

import bleach 
from ckeditor.fields import RichTextField 

ALLOWED_TAGS = set(bleach.ALLOWED_TAGS + [ 
    'a', 'blockquote', 'code', 'del', 'dd', 'dl', 'dt', 
    'h1', 'h2', 'h3', 'h3', 'h4', 'h5', 'i', 'img', 'kbd', 
    'li', 'ol', 'ul', 'p', 'pre', 's', 'sup', 'sub', 'em', 
    'strong', 'strike', 'ul', 'br', 'hr' ]) 

ALLOWED_STYLES = set(bleach.ALLOWED_STYLES + [ 
    'color', 'background-color', 'font', 'font-weight', 
    'height', 'max-height', 'min-height', 
    'width', 'max-width', 'min-width', ]) 

ALLOWED_ATTRIBUTES = {} 
ALLOWED_ATTRIBUTES.update(bleach.ALLOWED_ATTRIBUTES) 
ALLOWED_ATTRIBUTES.update({ 
    '*': ['class', 'title'], 
    'a': ['href', 'rel'], 
    'img': ['alt', 'src', 'width', 'height', 'align', 'style'], 
}) 


def bleach_clean(html): 
    """ Cleans given HTML with bleach.clean() """ 
    return bleach.clean(
     html, 
     tags=ALLOWED_TAGS, 
     attributes=ALLOWED_ATTRIBUTES, 
     styles=ALLOWED_STYLES, 
     strip=True 
    ) 


class RichTextBleachField(RichTextField): 
    def __init__(self, *args, **kwargs): 
     super(RichTextBleachField, self).__init__(*args, **kwargs) 
    def to_python(self, value): 
     return bleach_clean(value) 

Wir nutzen dies für einige Sicherheit eingeschränkt Projekte und es funktioniert gut. Bleach weiß auch, wie man defekten HTML-Code repariert, so dass wir eine kostenlose Validierung mit dem Feld erhalten, das sehr einfach mit Modellen und Formularen verwendet werden kann.

+0

Danke! Schätze es wirklich. Dies sollte mein Problem lösen, da Sie es bereits benutzen. werde es in den nächsten Tagen versuchen. wird dich aktualisieren. –

+0

versuchte es gerade jetzt .. ich war dabei, diese Funktion zu entfernen, aber dank dir ist es jetzt Teil meines Projekts. –

+0

Gut zu hören! Frohe Weihnachten und viel Glück für Ihr Projekt. –

Verwandte Themen