关于 sql-injection-prevention
用于防范 SQL 注入的安全技能,涵盖预处理语句、参数化查询、ORM 实践与输入验证,并提供 Node.js、Python 和 Java 的实现参考。
主要功能
- 01预处理语句指南
- 02参数化查询实践
- 03ORM 使用指南
- 04输入验证与净化
- 05动态值白名单
- 06分语言实现参考
适用场景
- 01保障数据库查询开发安全
- 02审查旧代码中的注入风险
- 03修复安全审计发现的问题
- 04保护处理用户输入的 API 端点
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill sql-injection-prevention安装后在 Claude Code 中输入/sql-injection-prevention确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/input-validation-sanitization.mdjava-jdbc-with-prepared-statements.mdnodejs-with-postgresql.mdpython-with-sqlalchemy-orm.mdscripts/validate-schema.shtemplates/migration-template.sql详细介绍
SQL 注入防护
目录
概述
使用预处理语句、参数化查询、ORM 最佳实践和输入验证,全面防止 SQL 注入。
适用场景
- 数据库查询开发
- 遗留代码安全审查
- 安全审计问题修复
- API 端点开发
- 用户输入处理
- 动态查询生成
快速入门
最小可运行示例:
// secure-db.js
const { Pool } = require("pg");
class SecureDatabase {
constructor() {
this.pool = new Pool({
host: process.env.DB_HOST,
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
}
/**
* ✅ SECURE: Parameterized query
*/
async getUserById(userId) {
const query = "SELECT * FROM users WHERE id = $1";
const values = [userId];
try {
const result = await this.pool.query(query, values);
// ... (see reference guides for full implementation)
参考指南
references/ 目录中的详细实现:
| 指南 | 内容 |
|---|---|
| Node.js with PostgreSQL | Node.js 与 PostgreSQL |
| Python with SQLAlchemy ORM | Python 与 SQLAlchemy ORM |
| Java JDBC with Prepared Statements | Java JDBC 与预处理语句 |
| Input Validation & Sanitization | 输入验证与清理 |
最佳实践
✅ 应该
- 始终使用预处理语句
- 正确使用 ORM 框架
- 验证所有用户输入
- 对动态值使用白名单
- 使用遵循最小权限原则的数据库账号
- 启用查询日志记录
- 定期进行安全审计
- 使用参数化查询
❌ 不应该
- 拼接用户输入
- 信任客户端验证
- 使用字符串格式化构造查询
- 允许动态表名或列名
- 授予过多数据库权限
- 跳过输入验证
评论
支持 Markdown