如果我发送类似
的内容{
"description": "Hello World <script>alert('hacked');</script>"
}
到我的django rest框架视图,我想摆脱脚本标签。
strip_tags
?答案 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