我目前正在使用将Django 2.2与djangorestframework 3.9.2结合使用的应用程序。我知道Django本身提供了针对SQL注入的保护,或者在Django模板(XSS)中显示内容的上下文中提供了保护,但是我注意到,虽然我使用Django REST API,但模型中的所有CharField都不会自动清除。
注意:此问题不适用于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("Hello there");</script>
。它将被保存在数据库中,并由REST API照原样返回,从而允许远程运行任何JS脚本(基本上是跨站点脚本)。
这是预期的行为吗?如何预防?
您可以escape()
在序列化程序的验证中使用方法:
from django.utils.html import escape
class MySerializer:
def validate_myfield(self, value):
return escape(value)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句