StripTagsHTMLParser.py 990 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3. # https://www.jianshu.com/p/57475845f3ad
  4. from html.parser import HTMLParser
  5. from fastapi import Request
  6. import json
  7. from exceptions import XssException
  8. class StripTagsHTMLParser(HTMLParser):
  9. data = ""
  10. def handle_data(self, data):
  11. self.data += data
  12. def getData(self):
  13. return self.data
  14. async def remove_xss_json(request: Request) -> dict:
  15. data = await request.body()
  16. if len(data) == 0:
  17. return {}
  18. body = data.decode(encoding='utf-8')
  19. try:
  20. parser = StripTagsHTMLParser()
  21. parser.feed(body)
  22. data = parser.getData()
  23. data = json.loads(data)
  24. return data
  25. except:
  26. raise XssException()
  27. def remove_xss(val: str) -> str:
  28. try:
  29. if val is None:
  30. return ""
  31. else:
  32. parser = StripTagsHTMLParser()
  33. parser.feed(val)
  34. return parser.getData()
  35. except:
  36. raise XssException(val)