В настоящее время я работаю над приложением, использующим Django 2.2 с djangorestframework 3.9.2. Я знаю, что Django сам по себе обеспечивает хорошую защиту от SQL инъекций или в контексте отображения контента в django шаблонах (XSS), но я заметил, что, хотя я использую Django REST API, все CharFields в моих моделях не очищаются автоматически.
Примечание. Этот вопрос не относится к django шаблонам.
Например, для модели прямых сообщений (message/models.py
):
class Message(models.Model):
sender = models.ForeignKey(...)
receiver = models.ForeignKey(...)
message = models.CharField(max_length=1200)
timestamp = models.DateTimeField(...)
is_read = models.BooleanField(default=False)
Фактически не предоставляет потенциальному злоумышленнику возможность напечатать сообщение, содержащее <script>alert("Attack");</script>
. Он будет сохранен в базе данных и будет обслуживаться REST API как действительный HTML, что позволяет выполнять атаку межсайтовых сценариев.
Это ожидаемое поведение? Как это можно предотвратить?