清理 Django Rest Framework 中的输入

Sanitize input in Django Rest Framework

如果我发送类似

的内容
{
    "description": "Hello World <script>alert('hacked');</script>"
}

对于我的 django rest 框架视图,我想去掉脚本标签。

  1. 有没有一种方便的方法可以做到这一点,而不涉及覆盖所有内容并添加 strip_tags
  2. 还要做什么来清理输入?
  3. 我是否真的过度阅读了 drf 文档中的该部分,还是没有涵盖?

您可以重写视图的 perform_create 方法,并使用一些正则表达式做类似这样的事情

import re
class MyView(generics.CreateAPIView):
      ......
      ......
      def perform_create(self, serializer):
            replacement=re.sub('</*script>','',serializer.validated_data.get('description'))
            serializer.save(description=replacement)

这是假设您正在使用 CreateAPIView 或其混入之一。 或者您可以创建一个 custom 序列化程序字段,

class MyCustomField(serializers.CharField):


    def to_internal_value(self, data):
        data=re.sub('</*script>','',data)
        return super(MyCustomField,self).to_internal_value(data)

class MySerializer(serializer.ModelSerializer):
      description=MyCustomField()
      class Meta:
           model= MyModel

忽略这里的答案,它们太糟糕了。

使用bleach。你不会得到每一个边缘案例。这是使用库的情况。根据定义,您的客户可以控制客户端。