#django
#django
Вопрос:
У меня есть FormView, который позволяет нашим пользователям редактировать содержимое HTML-страницы.
class PrelanderUpdate(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
model = Prelander
form_class = PrelanderForm
template_name = 'generic/form.html'
success_message = 'Prelander updated successfully.'
def get_success_url(self):
return reverse('mediabuying:prelander:list')
Это моя форма:
class PrelanderForm(forms.ModelForm):
class Meta:
model = Prelander
fields = [
'is_active', 'vertical', 'angle',
'description', 'static_prefix', 'content'
]
help_texts = {
'description': '<i>Keep this short:</i> This will be shown in the dropdown', # noqa
'content': 'HTML code only.',
'static_prefix': 'folder name in s3',
}
vertical = forms.ChoiceField(choices=Choices.Verticals)
def clean_content(self):
data = self.cleaned_data['content']
if '<meta name="referrer" content="always">' not in data:
raise forms.ValidationError(
'Missing <meta name="referrer" content="always">'
)
return data
Когда я редактирую content
прелендера, если у прелендера нет <meta name="referrer" content="always">
и выдается ошибка проверки, я вижу эту ошибку:
Почему это происходит? Почему это происходит только при возникновении исключения?
(Содержимое prelander представляет собой HTML-страницу)
Комментарии:
1. как вы отображаете содержимое своей формы? Когда происходит ошибка ValidationError, предположительно, вы повторно отображаете свою страницу с
content
полем. Если это содержит необработанный HTML со скриптами, chrome заблокирует его, поскольку именно так злоумышленники выполняют XSS-атаки. Вы могли бы добавитьX-XSS-Protection: 0
заголовок, чтобы предотвратить проверку XSS, хотя я не уверен, что это работает в последних версиях браузеров.2. Я отображаю ее в текстовом поле.