CSV文件Prompt字段恶意脚本检测与过滤方案咨询
处理CSV输入的安全最佳实践与工具推荐
一、特殊字符过滤与XSS防护(针对<script>内容)
- 正则过滤实现:
- 先明确安全团队指定的高危字符列表(比如
',",;,--,/*等SQL注入相关字符,或<,>等XSS触发字符),再通过正则完成双重清理:import re def sanitize_prompt(prompt): # 移除所有<script>标签及内容,支持大小写不敏感、跨行匹配 prompt = re.sub(r'<script[^>]*>.*?</script>', '', prompt, flags=re.IGNORECASE | re.DOTALL) # 移除指定特殊字符,可根据需求替换为空或安全占位符(如空格) forbidden_chars = r"['\";--/*<>]" prompt = re.sub(forbidden_chars, '', prompt) return prompt - 注意:正则要覆盖不全/变形的脚本标签(比如
<SCRIPT src=x>),用re.DOTALL处理跨行的脚本内容。
- 先明确安全团队指定的高危字符列表(比如
- 成熟工具替代:
- Python生态可使用
bleach库专门做HTML/XSS清理,既能精准移除<script>这类危险标签,也能过滤特殊字符:import bleach def sanitize_with_bleach(prompt): # 禁止所有HTML标签,直接剥离 cleaned = bleach.clean(prompt, tags=[], strip=True) # 额外清理安全团队指定的SQL高危字符 cleaned = re.sub(r"['\";--/*]", '', cleaned) return cleaned - Java生态可使用
OWASP Java Encoder,支持输入编码、危险字符过滤,同时覆盖XSS和SQL注入防护场景。
- Python生态可使用
二、SQL注入防护补充措施
- 参数化传递:即使你不存储数据,若外部API后端涉及SQL操作,建议将Prompt作为独立参数传递,而非嵌入到可能被解析为SQL语句的字符串中,避免API端因拼接字符串触发注入。
- 输入校验前置:除过滤外,增加基础校验:限制Prompt的长度(比如最长2000字符),校验Address的格式(确保是合法的唯一ID,如UUID、数字串),直接丢弃格式异常的行。
三、流程层面的安全强化
- 分层校验:在多环节设置防护,避免单点失效:
- CSV读取阶段:校验每行的Address、Prompt字段是否符合格式要求,丢弃空值或格式异常的行。
- 请求构造前:先执行字符过滤,再用简单规则扫描可疑内容(比如包含
UNION SELECT等SQL关键字),拦截高风险请求。
- 日志留痕:记录被过滤/拦截的请求(仅记录customId和过滤前的内容摘要,避免敏感数据泄露),方便安全团队复盘。
内容的提问来源于stack exchange,提问作者roxiehehe
相关产品推荐
相关产品推荐

