清理Django Rest Framework中的输入

时间:2015-04-14 19:31:37

标签: python django django-rest-framework

如果我发送类似

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

到我的django rest框架视图,我想摆脱脚本标签。

  1. 有没有方便的方法来执行此操作,不涉及覆盖所有内容并添加strip_tags
  2. 还有什么办法来消毒输入?
  3. 我是否真的在drf文档中覆盖了该部分,还是没有覆盖?

2 个答案:

答案 0 :(得分:5)

在这里忽略答案,它们很糟糕。

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

答案 1 :(得分:-4)

您可以覆盖视图的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或其中一个mixin。 或者您可以创建一个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