mirror of
https://github.com/Kozea/Radicale.git
synced 2025-08-22 19:20:54 +00:00
Protect against XML DOS attacks
Only XML content from authenticated users is parsed.
This commit is contained in:
parent
562d3aacec
commit
e11661ff3e
3 changed files with 6 additions and 4 deletions
|
@ -37,6 +37,7 @@ import zlib
|
|||
from http import client
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
import defusedxml.ElementTree as DefusedET
|
||||
import pkg_resources
|
||||
|
||||
from radicale import (auth, httputils, log, pathutils, rights, storage, web,
|
||||
|
@ -355,7 +356,7 @@ class Application(
|
|||
if not content:
|
||||
return None
|
||||
try:
|
||||
xml_content = ET.fromstring(content)
|
||||
xml_content = DefusedET.fromstring(content)
|
||||
except ET.ParseError as e:
|
||||
logger.debug("Request content (Invalid XML):\n%s", content)
|
||||
raise RuntimeError("Failed to parse XML: %s" % e) from e
|
||||
|
|
|
@ -26,9 +26,9 @@ import posixpath
|
|||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
import xml.etree.ElementTree as ET
|
||||
from functools import partial
|
||||
|
||||
import defusedxml.ElementTree as DefusedET
|
||||
import pytest
|
||||
|
||||
from radicale import Application, config, storage
|
||||
|
@ -1161,7 +1161,7 @@ class BaseRequestsMixIn:
|
|||
if sync_token and status == 409:
|
||||
return None, None
|
||||
assert status == 207
|
||||
xml = ET.fromstring(answer)
|
||||
xml = DefusedET.fromstring(answer)
|
||||
sync_token = xml.find("{DAV:}sync-token").text.strip()
|
||||
assert sync_token
|
||||
return sync_token, xml
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue