StripTagsHTMLParser.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. from extensions import logger
  9. class StripTagsHTMLParser(HTMLParser):
  10. data = ""
  11. def handle_data(self, data):
  12. self.data += data
  13. def getData(self):
  14. return self.data
  15. async def remove_xss_json(request: Request) -> dict:
  16. data = await request.body()
  17. if len(data) == 0:
  18. return {}
  19. body = data.decode(encoding='utf-8')
  20. try:
  21. parser = StripTagsHTMLParser()
  22. parser.feed(body)
  23. data = parser.getData()
  24. data = json.loads(data)
  25. # print("remove_xss_json>>>>>")
  26. logger.info(data)
  27. return data
  28. except:
  29. raise XssException()
  30. def remove_xss(val: str) -> str:
  31. try:
  32. if val is None:
  33. return ""
  34. else:
  35. parser = StripTagsHTMLParser()
  36. parser.feed(val)
  37. return parser.getData()
  38. except:
  39. raise XssException(val)