系统讲解 Perl 安全开发实践,帮助识别并修复常见代码与Web安全风险。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "perl-security" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/perl-security/SKILL.md 2. 保存为 ~/.claude/skills/perl-security/SKILL.md 3. 装好后重载技能,告诉我可以用了
请审查这段 Perl 代码的安全风险,重点检查 taint mode、输入验证、命令执行、SQL 注入和 XSS 问题,并给出修复建议与示例代码。
一份按风险分类的安全审查结果,包含漏洞说明、风险等级和修复后的 Perl 示例。
我在 Perl 中使用 DBI 访问数据库,请把下面的拼接 SQL 改写为参数化查询,并说明这样如何降低 SQL 注入风险。
参数化 DBI 查询示例,以及输入处理和数据库安全实践说明。
请基于 Perl 安全最佳实践,生成一个团队可用的安全编码清单,涵盖 taint mode、文件与进程操作、Web 安全、依赖审查和 perlcritic 安全策略。
一份结构化的 Perl 安全编码清单,可用于代码评审和开发规范落地。
Comprehensive security guidelines for Perl applications covering input validation, injection prevention, and secure coding practices.
Start with taint-aware input boundaries, then move outward: validate and untaint inputs, keep filesystem and process execution constrained, and use parameterized DBI queries everywhere. The examples below show the safe defaults this skill expects you to apply before shipping Perl code that touches user input, the shell, or the network.
Perl's taint mode (-T) tracks data from external sources and prevents it from being used in unsafe operations without explicit validation.
#!/usr/bin/perl -T
use v5.36;
# Tainted: anything from outside the program
my $input = $ARGV[0]; # Tainted
my $env_path = $ENV{PATH}; # Tainted
my $form = <STDIN>; # Tainted
my $query = $ENV{QUERY_STRING}; # Tainted
# Sanitize PATH early (required in taint mode)
$ENV{PATH} = '/usr/local/bin:/usr/bin:/bin';
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
use v5.36;
# Good: Validate and untaint with a specific regex
sub untaint_username($input) {
if ($input =~ /^([a-zA-Z0-9_]{3,30})$/) {
return $1; # $1 is untainted
}
die "Invalid username: must be 3-30 alphanumeric characters\n";
}
# Good: Validate and untaint a file path
sub untaint_filename($input) {
if ($input =~ m{^([a-zA-Z0-9._-]+)$}) {
return $1;
}
die "Invalid filename: contains unsafe characters\n";
}
# Bad: Overly permissive untainting (defeats the purpose)
sub bad_untaint($input) {
$input =~ /^(.*)$/s;
return $1; # Accepts ANYTHING — pointless
}
use v5.36;
# Good: Allowlist — define exactly what's permitted
sub validate_sort_field($field) {
my %allowed = map { $_ => 1 } qw(name email created_at updated_at);
die "Invalid sort field: $field\n" unless $allowed{$field};
return $field;
}
# Good: Validate with specific patterns
sub validate_email($email) {
if ($email =~ /^([a-zA-Z0-9._%+-]+\@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$/) {
return $1;
}
die "Invalid email address\n";
}
sub validate_integer($input) {
if ($input =~ /^(-?\d{1,10})$/) {
return $1 + 0; # Coerce to number
}
die "Invalid integer\n";
}
# Bad: Blocklist — always incomplete
sub bad_validate($input) {
die "Invalid" if $input =~ /[<>"';&|]/; # Misses encoded attacks
return $input;
}
use v5.36;
sub validate_comment($text) {
die "Comment is required\n" unless length($text) > 0;
die "Comment exceeds 10000 chars\n" if length($text) > 10_000;
return $text;
}
Catastrophic backtracking occurs with nested quantifiers on overlapping patterns.
use v5.36;
# Bad: Vulnerable to ReDoS (exponential backtracking)
my $bad_re = qr/^(a+)+$/; # Nested quantifiers
my $bad_re2 = qr/^([a-zA-Z]+)*$/; # Nested quantifiers on class
my $bad_re3 = qr/^(.*?,){10,}$/; # Repeated greedy/lazy combo
# Good: Rewrite without nesting
my $good_re = qr/^a+$/; # Single quantifier
my $good_re2 = qr/^[a-zA-Z]+$/; # Single quantifier on class
# Good: Use possessive quantifiers or atomic groups to prevent backtracking
my $safe_re = qr/^[a-zA-Z]++$/; # Possessive (5.10+)
my $safe_re2 = qr/^(?>a+)$/; # Atomic group
# Good: Enforce timeout on untrusted patterns
use POSIX qw(alarm);
sub safe_match($string, $pattern, $timeout = 2) {
…
帮助团队为医疗应用设计符合PHI/PII要求的数据安全与合规方案
通过逐步细化检索上下文,提升子代理任务理解与结果质量。
帮助你设计与优化 Spring Boot 后端架构、接口与服务实现。
基于多源网页检索与综合分析,生成带引用和来源标注的深度研究报告
用于管理 Uncloud 集群,完成部署、入口配置、扩缩容与运维排障。
为 KMP 项目提供 Compose 多平台界面架构、导航、主题与性能实践。
帮助开发者在认证、输入处理、密钥和敏感功能开发中进行系统安全审查
提供现代 Perl 5.36+ 惯用法与最佳实践,帮助编写稳健且易维护的应用。
帮助开发者落实 Laravel 安全最佳实践,覆盖认证授权、常见漏洞防护与安全部署。
审计其他 MCP 服务器的规范合规与安全风险,并给出修复建议。
帮助开发者落实 Django 安全最佳实践,构建更安全的认证、授权与部署方案。
针对 Python、JS/TS 与 Go 提供安全最佳实践审查与改进建议