Files
zhangtao b0ae6af3b1 chore: update .gitignore and enhance docstrings across multiple files
- Added *.pyc and *.pyo to .gitignore to prevent compiled Python files from being tracked.
- Improved docstrings in various modules, providing clearer descriptions of functions, parameters, and return values to enhance code readability and maintainability.
2026-04-04 01:21:59 +08:00

159 lines
2.9 KiB
Python

import bleach
ALLOWED_TAGS = [
"a",
"abbr",
"acronym",
"b",
"blockquote",
"br",
"code",
"col",
"colgroup",
"dd",
"del",
"dl",
"dt",
"em",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"hr",
"i",
"img",
"li",
"ol",
"p",
"pre",
"s",
"span",
"strike",
"strong",
"sub",
"sup",
"table",
"tbody",
"td",
"tfoot",
"th",
"thead",
"tr",
"tt",
"u",
"ul",
"video",
"source",
"div",
"font",
]
ALLOWED_ATTRIBUTES = {
"*": ["class", "style", "id", "data-*"],
"a": ["href", "title", "target", "rel"],
"abbr": ["title"],
"acronym": ["title"],
"img": ["src", "alt", "title", "width", "height"],
"video": ["src", "controls", "width", "height", "poster"],
"source": ["src", "type"],
"font": ["color", "size", "face"],
"td": ["width", "height", "colspan", "rowspan"],
"th": ["width", "height", "colspan", "rowspan"],
"col": ["width", "span"],
"colgroup": ["span"],
}
ALLOWED_STYLES = [
"color",
"background-color",
"font-size",
"font-family",
"font-weight",
"font-style",
"text-decoration",
"text-align",
"margin",
"margin-left",
"margin-right",
"margin-top",
"margin-bottom",
"padding",
"padding-left",
"padding-right",
"padding-top",
"padding-bottom",
"border",
"border-color",
"border-width",
"border-style",
"width",
"height",
"line-height",
"display",
]
def sanitize_html(content: str) -> str:
"""
清理 HTML 内容,移除潜在的 XSS 攻击代码。
参数:
- content (str): 需要清理的 HTML 内容
返回:
- str: 清理后的安全 HTML 内容
"""
if not content:
return content
return bleach.clean(
content,
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
strip=True,
strip_comments=True,
)
def sanitize_html_with_styles(content: str) -> str:
"""
清理 HTML 内容;标签与属性白名单与 `sanitize_html` 一致。
参数:
- content (str): 需要清理的 HTML 内容。
返回:
- str: 清理后的 HTML 字符串。
说明:
- `ALLOWED_STYLES` 供后续接入 bleach 样式清洗时使用,当前实现与 `sanitize_html` 相同。
"""
if not content:
return content
return bleach.clean(
content,
tags=ALLOWED_TAGS,
attributes=ALLOWED_ATTRIBUTES,
strip=True,
strip_comments=True,
)
def strip_all_tags(content: str) -> str:
"""
移除所有 HTML 标签,只保留纯文本。
参数:
- content (str): 需要处理的 HTML 内容
返回:
- str: 纯文本内容
"""
if not content:
return content
return bleach.clean(content, tags=[], attributes={}, strip=True)