mirror of
https://github.com/clearml/clearml-server
synced 2025-06-25 14:15:47 +00:00
Fix CSV export vulnerability by escaping cell text if it matches a macro or formula prefix
This commit is contained in:
parent
a7e340212f
commit
c0183e4302
@ -225,6 +225,18 @@ def prepare_download_for_get_all(
|
|||||||
call.result.data = dict(prepare_id=call.id)
|
call.result.data = dict(prepare_id=call.id)
|
||||||
|
|
||||||
|
|
||||||
|
_dangerous_chars = ("=", "+", "-", "@", "\t", "\r")
|
||||||
|
|
||||||
|
def _sanitize_csv(value: str) -> str:
|
||||||
|
"""
|
||||||
|
Prevent csv injection:
|
||||||
|
If the string starts with any of the chars that Excel
|
||||||
|
interpret as a special char then prepend it with a single quote
|
||||||
|
"""
|
||||||
|
if value and value.startswith(_dangerous_chars):
|
||||||
|
return f"'{value}"
|
||||||
|
return value
|
||||||
|
|
||||||
@endpoint("organization.download_for_get_all")
|
@endpoint("organization.download_for_get_all")
|
||||||
def download_for_get_all(call: APICall, company, request: DownloadForGetAllRequest):
|
def download_for_get_all(call: APICall, company, request: DownloadForGetAllRequest):
|
||||||
request_data = redis.get(f"get_all_download_{request.prepare_id}")
|
request_data = redis.get(f"get_all_download_{request.prepare_id}")
|
||||||
@ -275,7 +287,7 @@ def download_for_get_all(call: APICall, company, request: DownloadForGetAllReque
|
|||||||
if values and isinstance(val, Hashable):
|
if values and isinstance(val, Hashable):
|
||||||
val = values.get(val, val)
|
val = values.get(val, val)
|
||||||
|
|
||||||
return str(val)
|
return _sanitize_csv(str(val))
|
||||||
|
|
||||||
def get_projected_fields(data: dict) -> Sequence[str]:
|
def get_projected_fields(data: dict) -> Sequence[str]:
|
||||||
return [
|
return [
|
||||||
|
Loading…
Reference in New Issue
Block a user