sql-injection-prevention
SQL 注入防护与常见安全漏洞检查——参数化查询、输入校验、最小权限原则。当涉及数据库操作或安全敏感代码时自动触发。 触发词:SQL、数据库操作、SQL 注入、安全漏洞、权限校验。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
SQL 注入防护与常见安全漏洞检查——参数化查询、输入校验、最小权限原则。当涉及数据库操作或安全敏感代码时自动触发。 触发词:SQL、数据库操作、SQL 注入、安全漏洞、权限校验。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
用 citty + @clack/prompts 构建 Node.js CLI 的端到端工作流,覆盖命令路由、参数 schema、 终端交互、异步任务 UI 与 ESM 发布。触发词:citty、clack、prompts、CLI、命令行、子命令、 交互式、spinner、defineCommand、runMain、ESM 发布。
构建、扩展或调试 CodeMirror 6 浏览器代码编辑器,覆盖状态事务、扩展原语、 装饰、Compartment、语言包、补全诊断、主题、React 集成与 CM5→CM6 迁移。 触发词:CodeMirror 6、CM6、@codemirror/、EditorView、StateField、 Lezer、@uiw/react-codemirror。
使用 @pierre/diffs 与 @pierre/trees 构建代码审查、PR 视图、IDE 文件树、Merge Conflict 解决器。 覆盖 React/Vanilla API、虚拟化、Worker Pool、SSR、Shadow DOM 主题、CodeMirror 集成。 触发词:pierre、diff 渲染、文件树、PR 视图、merge conflict。
GitHub 仓库运营 + npm 包 tag 触发发布的一体化工作流。覆盖 issue/PR 分诊、CI 排障、 安全告警,以及 npm publish(provenance / scoped)+ 自动 GitHub Release(CHANGELOG 段落注入)。 触发词:github、gh、release、publish、tag、npm、provenance、changelog、triage、ci broken、版本发布。
为长跑 AI Coding 任务(Codex /goal、Claude Code、Cursor、Kiro autopilot)构建可审计、 不假完成、抗漂移的提示词。激活后先澄清需求、自动加载 AGENTS.md / 当前 spec / lessons.md, 再产出 5 段式 goal 与长跑健康守则。触发词:goal、写 goal、长任务、长跑、ralph。
使用 Mantine 组件库构建 React UI。涵盖核心组件选型、主题定制、Styles API、 布局模式、表单处理、日期选择器、图表、日程组件、通知系统、模态框管理、 Spotlight 搜索、文件上传、轮播、富文本编辑与 50+ hooks。 触发词:Mantine、UI 组件、主题配置、Styles API、DatePicker、Schedule、 Heatmap、通知、模态框、表单布局、Spotlight、Dropzone、Carousel、hooks。
| name | sql-injection-prevention |
| type | security-rule |
| description | SQL 注入防护与常见安全漏洞检查——参数化查询、输入校验、最小权限原则。当涉及数据库操作或安全敏感代码时自动触发。 触发词:SQL、数据库操作、SQL 注入、安全漏洞、权限校验。 |
| version | 1.0.0 |
| author | wta |
基于 OWASP Top 10 核心防护规范。
禁止字符串拼接构造 SQL。 任何用户输入直接拼入 SQL 语句都是安全漏洞,必须使用参数化查询。
| 做法 | 示例 |
|---|---|
| ✅ 参数化查询 | db.query('SELECT * FROM users WHERE id = ?', [userId]) |
| ✅ ORM 查询 | User.findById(userId) |
| ✅ Query Builder | knex('users').where('id', userId) |
| ❌ 字符串拼接 | db.query(\SELECT * FROM users WHERE id = ${userId}`)` |
| ❌ 模板拼接 | db.query('SELECT * FROM users WHERE id = ' + userId) |
| 做法 | 示例 |
|---|---|
| ✅ PreparedStatement | ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); ps.setLong(1, userId); |
| ✅ Spring JdbcTemplate | jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?", User.class, userId) |
| ✅ MyBatis 占位符 | <select>SELECT * FROM users WHERE id = #{userId}</select>(使用 #{},不是 ${}) |
| ✅ Spring Data JPA | userRepository.findById(userId) 或 @Query("... WHERE u.id = :id") + @Param("id") |
| ❌ 字符串拼接 | Statement st = conn.createStatement(); st.execute("SELECT * FROM users WHERE id = " + userId); |
❌ MyBatis ${} | <select>SELECT * FROM users WHERE id = ${userId}</select>(直接拼接) |
| 做法 | 示例 |
|---|---|
| ✅ psycopg2 占位符 | cur.execute("SELECT * FROM users WHERE id = %s", (user_id,)) |
| ✅ sqlite3 占位符 | cur.execute("SELECT * FROM users WHERE id = ?", (user_id,)) |
| ✅ SQLAlchemy ORM | session.query(User).filter(User.id == user_id).first() |
| ✅ SQLAlchemy Core | select(users).where(users.c.id == user_id) |
| ❌ f-string / format | cur.execute(f"SELECT * FROM users WHERE id = {user_id}") |
| ❌ 字符串拼接 | cur.execute("SELECT * FROM users WHERE id = " + str(user_id)) |
| 做法 | 示例 |
|---|---|
| ✅ database/sql 占位符 | db.QueryRow("SELECT * FROM users WHERE id = $1", userID) |
| ✅ sqlx | db.Get(&user, "SELECT * FROM users WHERE id = ?", userID) |
| ❌ fmt.Sprintf | db.Query(fmt.Sprintf("SELECT * FROM users WHERE id = %d", userID)) |
原则:参数化查询只能绑定值,不能绑定表名/列名。如需动态拼接表名/列名,必须使用白名单。以下示例在任何语言中模式一致。
// Node / TypeScript
const ALLOWED_COLUMNS = ['id', 'name', 'createdAt'];
const ALLOWED_ORDERS = ['asc', 'desc'];
function listUsers(sortBy: string, order: string) {
if (!ALLOWED_COLUMNS.includes(sortBy)) {
throw new ValidationError(`不支持的排序字段: ${sortBy}`);
}
if (!ALLOWED_ORDERS.includes(order)) {
throw new ValidationError(`不支持的排序方向: ${order}`);
}
return db.query(`SELECT * FROM users ORDER BY ${sortBy} ${order}`);
}
// Java / Spring Boot
private static final Set<String> ALLOWED_COLUMNS = Set.of("id", "name", "created_at");
private static final Set<String> ALLOWED_ORDERS = Set.of("asc", "desc");
public List<User> listUsers(String sortBy, String order) {
if (!ALLOWED_COLUMNS.contains(sortBy)) {
throw new ValidationException("不支持的排序字段: " + sortBy);
}
if (!ALLOWED_ORDERS.contains(order)) {
throw new ValidationException("不支持的排序方向: " + order);
}
String sql = "SELECT * FROM users ORDER BY " + sortBy + " " + order;
return jdbcTemplate.query(sql, userRowMapper);
}
# Python
ALLOWED_COLUMNS = {"id", "name", "created_at"}
ALLOWED_ORDERS = {"asc", "desc"}
def list_users(sort_by: str, order: str):
if sort_by not in ALLOWED_COLUMNS:
raise ValueError(f"不支持的排序字段: {sort_by}")
if order not in ALLOWED_ORDERS:
raise ValueError(f"不支持的排序方向: {order}")
sql = f"SELECT * FROM users ORDER BY {sort_by} {order}"
return cur.execute(sql).fetchall()
@Valid + @NotNull/@Size/@Pattern) 、Hibernate Validator[Required]/[Range] Data Annotations如果在代码中看到以下模式,立即标记为 [必须修复]:
exec(userInput))