지난글에서 XSS가 무엇인지 알아봤다면 DRF환경에서 db에 저장될때 강제적으로 특수문자를 바꿔서 저장을 해서 막아볼 생각이다.
진행방식
평소에 사용하던 serializers.SerializerMethodField 를 사용해서 시리얼라이저를 통과할때 객체에 바뀐 content를 저장
escape 함수를 이용해서 변환
obj의 content만 찍히지 않아서 views에서의 작업해서 context로 serializer에 전달 (content가 찍히지 않는 이유는 read_only라 조회한 값만 사용가능하다고 생각)
serializer = ReviewCreateSerializer(data=request.data,context={'request':request})
escape함수를 활용해서 특수문자 변환
print(escape(self.context['request'].data['content']))
class ReviewCreateSerializer(serializers.ModelSerializer):
content = serializers.SerializerMethodField()
def get_content(self, validated_data):
return escape(self.context['request'].data['content'])
하면 될 줄 알았다.
read_only 필드인걸 간과하고 create 하려고 했으니 안되는게 분명했다. serializer.data까지는 들어간게 찍혀도 저장이 되지 않았다.
그래서 create 함수를 활용해서 객체를 만들어 봤다.
결과적으로 context로 validated_data를 받아와서 객체를 db에 저장을했다.
'Programming > 기술 실험, 공부' 카테고리의 다른 글
테스트코드 | review | ValueError (0) | 2022.12.26 |
---|---|
Django Channels | 개념 | 사용이유 (0) | 2022.12.23 |
데코레이터 | DJANGO | 서버 | 이미지 파일 크기, 용량 제한 로직 | 백, 프론트 (0) | 2022.12.17 |
select_related | prefetch_related | 쿼리줄이기 | 코드 리팩토링 | 공부 (0) | 2022.12.16 |
Validation 1편 : 어떻게 사용할까? (0) | 2022.11.30 |