数据泄露检测工具。Use when user wants to scan skills, files, or folders for potential data leaks, privacy risks, or suspicious behavior. Detects network calls, file access, process spawning, and environment variable access. 数据安全、隐私检测、安全审计。
技能名称: data-leak-detector
详细描述:
扫描技能、文件和文件夹,以发现潜在的数据泄露和隐私风险。
| 等级 | 颜色 | 含义 |
|---|---|---|
| 🟢 低 | 绿色 | 安全,无需担忧 |
| 🟡 中 |
python
import os
import re
import json
from pathlib import Path
class DataLeakDetector:
def init(self):
self.patterns = {
network: {
high: [
rcurl\s+,
rwget\s+,
rrequests\.(get|post|put|delete),
rhttp[s]?://,
rurllib\.request,
rhttpx\.,
rwebsocket,
],
medium: [
rfetch\(,
raxios\.,
]
},
file_access: {
high: [
ropen\s*\(,
ros\.remove,
ros\.rmdir,
rshutil\.rmtree,
],
medium: [
rreadFile,
rwriteFile,
ros\.path\.exists,
rglob\.,
]
},
process: {
high: [
rsubprocess\.,
ros\.system,
ros\.popen,
rexec\(,
reval\(,
],
medium: [
rPopen,
rcall\(,
]
},
env_access: {
high: [
ros\.environ,
ros\.getenv,
r\$[A-Z_]+,
],
medium: [
rconfig\[,
rsecrets\[,
]
}
}
def scan_file(self, filepath):
扫描单个文件以发现风险
risks = []
try:
with open(filepath, r, encoding=utf-8) as f:
content = f.read()
except:
return risks
for category, levels in self.patterns.items():
for level, patterns in levels.items():
for pattern in patterns:
matches = re.finditer(pattern, content, re.IGNORECASE)
for match in matches:
line_num = content[:match.start()].count(\n) + 1
risks.append({
category: category,
level: level,
pattern: pattern,
line: line_num,
match: match.group()[:50]
})
return risks
def scanskill(self, skillpath):
扫描整个技能以发现风险
skillpath = Path(skillpath)
all_risks = []
files_scanned = 0
for ext in [.md, .py, .js, .ts]:
for filepath in skill_path.rglob(f*{ext}):
risks = self.scan_file(str(filepath))
for risk in risks:
risk[file] = str(filepath.relativeto(skillpath))
all_risks.extend(risks)
files_scanned += 1
return allrisks, filesscanned
def calculateriskscore(self, risks):
计算总体风险评分 (0-100)
if not risks:
return 0
score = 0
for risk in risks:
if risk[level] == high:
score += 20
elif risk[level] == medium:
score += 10
return min(score, 100)
def generatereport(self, skillpath, risks, files_scanned):
生成风险评估报告
riskscore = self.calculaterisk_score(risks)
if risk_score <= 20:
risk_level = 🟢 低
recommendation = 可安全使用
elif risk_score <= 50:
risk_level = 🟡 中
recommendation = 安装前请审查
else:
risk_level = 🔴 高
recommendation = 需要谨慎
# 按类别分组
by_category = {}
for risk in risks:
cat = risk[category]
if cat not in by_category:
by_category[cat] = []
by_category[cat].append(risk)
report = []
report.append(f{=*60})
report.append(f数据泄露检测器 - 安全报告)
report.append(f{=*60})
report.append(f)
report.append(f技能: {os.path.basename(skill_path)})
report.append(f扫描文件数: {files_scanned})
report.append(f发现风险总数: {len(risks)})
report.append(f)
report.append(f风险评分: {riskscore}/100 ({risklevel}))
report.append(f建议: {recommendation})
report.append(f)
# 类别细分
report.append(f{=*60})
report.append(f风险细分)
report.append(f{=*60})
for category, categoryrisks in bycategory.items():
high = len([r for r in category_risks if r[level] == high])
medium = len([r for r in category_risks if r[level] == medium])
report.append(f)
report.append(f{category.upper()}:)
report.append(f 高: {high} | 中: {medium})
for risk in category_risks[:3]: # 显示前3个
report.append(f - [{risk[level].upper()}] {risk[match]} (行 {risk[line]}))
# 建议
report.append(f)
report.append(f{=*60})
report.append(f建议)
report.append(f{=*60})
if network in by_category:
report.append(f- 审查网络调用:验证目标地址)
if fileaccess in bycategory:
report.append(f- 审查文件访问:检查敏感文件)
if process in by_category:
report.append(f- 审查子进程调用:验证命令)
if envaccess in bycategory:
report.append(f- 审查环境变量访问:检查凭据访问)
return \n.join(report)
用户: 检查这个skill安全吗
代理: 扫描 SKILL.md 并生成风险报告
用户: 扫描我的skills有没有数据泄露
代理: 扫描所有已安装的技能
用户: 这个skill有没有网络访问
代理: 重点关注网络风险
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 data-leak-detector-1775969701 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 data-leak-detector-1775969701 技能
skillhub install data-leak-detector-1775969701
文件大小: 4.07 KB | 发布时间: 2026-4-13 09:58