Appearance
Everything Claude Code Perl Security Skill 是专为 Perl 应用打造的安全能力模块,覆盖 taint mode 启用、输入校验、三参 open、DBI 参数化查询、Web XSS/CSRF 防护与 perlcritic 安全策略。它通过自动检测和建议,将 Perl 代码常见的命令注入、SQL 注入、路径穿越、XSS、CSRF、依赖风险等高危点纳入 AI 编程助手的安全防线,适用于 CGI、Mojolicious、Dancer2、Catalyst 等主流 Perl 场景。无论是新项目开发还是遗留代码审查,Skill 都能显著提升安全基线,防止因惯性疏忽导致的生产事故。
Everything Claude Code Perl Security Skill:Taint Mode、参数化查询与 perlcritic 安全策略
Perl 以灵活著称,但也因此极易因输入处理疏漏、命令拼接、文件操作等细节暴露安全隐患。Everything Claude Code Perl Security Skill 正是为此设计,聚合了从 taint mode、输入校验、文件与进程安全、SQL 防注入到 Web XSS/CSRF、依赖管理和 perlcritic 静态分析的全链路安全实践。配合 Everything Claude Code 完全指南 的 Agent/Skill/Hook 体系,该 Skill 可在 AI 编程助手(如 Claude Code、Cursor、Codex)自动介入 Perl 代码生成、审查与 CI 流程,形成多层次、可追溯的安全防护网。
1. 解决什么问题?对比不用 Skill 的风险
未用 Skill 时常见问题:
- 用户输入未经校验直接参与文件、命令、SQL 拼接,极易被注入
- 文件操作用两参 open,路径穿越与命令注入风险高
- SQL 查询字符串拼接,轻易被 SQLi 攻击
- Web 输出未编码,XSS/CSRF 漏洞频发
- 依赖随意升级,未做安全审计
- 缺乏统一安全编码规范和自动检查
Skill 介入后:
- 强制 taint mode,所有外部输入都被追踪为“不可信”
- 输入必须 allowlist 校验并 untaint,才能用于敏感操作
- 文件操作、进程调用、SQL 查询全部要求安全模式(如三参 open、DBI 占位符)
- Web 输出自动编码,CSRF Token 强制校验
- perlcritic 自动检测高危用法,CI 阶段阻断不合规代码
- 依赖要求版本锁定与最新安全审计
2. 触发条件:Skill 何时自动激活?
- 新建/修改 Perl 脚本涉及外部输入(如 $ARGV, %ENV,
<STDIN>, CGI 参数) - 代码中出现 open、system、exec、反引号、eval、SQL 查询等敏感 API
- Perl Web 框架(CGI、Mojolicious、Dancer2、Catalyst)路由、表单、Session 代码生成
- CI/CD 阶段检测到 .pm/.pl 文件变更或合入
- Agent/Skill/Hook 检测到依赖变更或 cpanfile 更新
Skill 会自动分析上下文,插入安全建议、重写不安全代码、补充缺失的安全校验,并输出详细的安全审计报告。
3. Step by Step 实战用法
Step 1:启用 taint mode,建立输入边界
操作:
- Perl 脚本头部加
-T参数 - 环境变量 PATH 等立即重置
perl
#!/usr/bin/perl -T
use v5.36;
$ENV{PATH} = '/usr/local/bin:/usr/bin:/bin';
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};Skill 自动检测: 若未加 -T 或未清理环境变量,AI 会自动补全并提示原因。
Step 2:输入校验与 untaint,拒绝不合规数据
操作:
- 所有用户输入(命令行、表单、环境变量)用正则 allowlist 校验
- 校验通过后用捕获组 untaint
perl
sub untaint_username($input) {
if ($input =~ /^([a-zA-Z0-9_]{3,30})$/) {
return $1; # $1 已 untaint
}
die "Invalid username\n";
}Skill 自动检测: 若出现宽泛 untaint(如 /^(.*)$/s),Skill 会阻断并要求精确校验。
Step 3:安全文件操作,杜绝 open 注入
操作:
- 强制三参 open,拒绝两参/一参 open
- 校验路径合法性,防止目录穿越
perl
open my $fh, '<:encoding(UTF-8)', $path or die $!;Skill 自动检测: 检查 open 用法,发现 open my $fh, $user_input 等高危写法自动替换并给出警告。
Step 4:安全进程调用,禁止 shell 拼接
操作:
- 所有 system/exec/反引号调用必须用列表形式
- 禁止字符串拼接和反引号
perl
system('grep', '-r', $pattern, '/var/log/app/');Skill 自动检测: 发现 system("grep $pattern ...")、`ls $dir` 等自动重写为安全调用。
Step 5:DBI 参数化查询,拒绝 SQL 拼接
操作:
- 所有 SQL 查询必须用占位符
- 动态字段、排序字段用 allowlist 校验
perl
my $sth = $dbh->prepare('SELECT * FROM users WHERE email = ?');
$sth->execute($email);Skill 自动检测: 发现 $dbh->do("SELECT ... $user_input ...") 立即阻断,要求改为参数化。
Step 6:Web 安全(XSS/CSRF/Session/Headers)
操作:
- 输出用
HTML::Entities、URI::Escape、encode_json等按场景编码 - 表单/接口强制 CSRF Token 校验
- Session、Cookie、Header 按最佳实践配置
perl
use HTML::Entities qw(encode_entities);
print encode_entities($user_input);Skill 自动检测: 检查模板输出、表单处理、Session 配置,发现未编码/未校验自动补全。
Step 7:perlcritic 安全策略与自动化审查
操作:
- 项目根目录配置 .perlcriticrc,启用安全主题
- CI 阶段自动运行 perlcritic,阻断高危代码合入
ini
# .perlcriticrc
severity = 3
theme = security + core
[InputOutput::RequireThreeArgOpen]
severity = 5
...Skill 自动检测: 若未配置 .perlcriticrc 或未覆盖关键策略,Skill 自动生成推荐配置并集成到 CI。
Step 8:依赖安全与正则安全
操作:
- cpanfile 锁定版本,优先选活跃维护模块
- 正则禁止嵌套量词,必要时加超时保护
perl
my $safe_re = qr/^[a-zA-Z]++$/; # possessive quantifierSkill 自动检测: 发现高危正则或依赖未锁定,自动提示修正建议。
4. 输出示例
Skill 典型输出:
- 检测到
open my $fh, $user_input,自动重写为三参 open,并插入路径校验函数 - 检测到 SQL 拼接,输出:
[Perl Security Skill] 检测到 SQL 注入风险,建议改为: my $sth = $dbh->prepare('SELECT ... WHERE email = ?'); $sth->execute($email); - 检测到 HTML 输出未编码,自动插入
encode_entities($input)并注释原因 - 检测到 .perlcriticrc 缺失,自动生成安全策略模板
5. 常见配套 Agent 与 Skill 协作
- Code Reviewer Agent:代码质量、安全性与可维护性专业审查代理,自动联动本 Skill 检查 Perl 代码安全
- Security Reviewer Agent:OWASP Top 10、密钥泄漏与注入漏洞自动检测,跨语言安全基线协作
- Repo Scan Skill:源码资产审计与四级 Verdict 报告,全项目安全扫描
- Verification Loop Skill:端到端验证循环,保障安全规则持续落地
Skill 也可结合 Everything Claude Code Hooks 实战 在 PreToolUse/PostToolUse 阶段自动触发安全检查。
6. 与其他 Skill 的协作关系
- 与 Perl Patterns Skill 共同提升 Perl 代码现代性与安全性
- 可与 Security Scan Skill 结合,自动扫描 .claude/ 目录的安全漏洞
- 作为 Rules 体系 的一部分,统一管理多语言安全规范
7. 注意事项与常见问题
- Skill 检查是“默认拒绝”原则,所有输入、文件、命令、SQL、Web 输出都需显式校验和编码
- 仅启用 taint mode 并不能自动防御所有攻击,必须配合输入校验和安全 API
- perlcritic 检查可定制,但建议保留所有安全相关规则
FAQ
Q: Perl taint mode 为什么必须启用? A: Taint mode 能自动追踪所有外部输入,防止未校验数据流入敏感操作,是防御注入和命令执行的第一道防线。
Q: DBI 占位符和 allowlist 校验能否同时用? A: 必须同时用。占位符防 SQL 注入,allowlist 校验防止动态字段被恶意利用,两者缺一不可。
Q: perlcritic 安全策略会不会误报?如何集成到 CI? A: 严格策略偶有误报,但能极大降低高危代码合入风险。建议在 CI 阶段强制执行,发现阻断及时修正。