Borrowing it
Nothing to install: this file belongs to cacr92/WeReply. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/cacr92/WeReply/main/.claude/skills/security-review/SKILL.mdgit clone --depth 1 https://github.com/cacr92/WeReplyWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/cacr92/wereply/security-review)<a href="https://agentmods.dev/skills/cacr92/wereply/security-review"><img src="https://agentmods.dev/badge/skills/cacr92/wereply/security-review/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/cacr92/wereply/security-review"><img src="https://agentmods.dev/badge/skills/cacr92/wereply/security-review.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.02681 |
| Opus 5 | $0.00000 | $0.01340 |
| Sonnet 5 | $0.00000 | $0.00536 |
| Haiku 4.5 | $0.00000 | $0.00268 |
Grade A, and why
security-review scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 398 lines — stays where its author put it; the contents beside it link to each section on GitHub.
安全审查 Skill
核心目标
在代码提交前识别和防止常见安全漏洞(针对 Tauri 桌面应用)。
桌面应用安全重点
本项目是 Tauri 桌面应用,安全重点与 Web 应用不同:
- ✅ 重点:本地数据保护、API 密钥管理、Tauri 命令安全、SQL 注入防护
- ❌ 不适用:CSRF、CSP(这些是 Web 应用的安全措施)
安全检查清单
1. 密钥管理 ✓
- 无硬编码 API 密钥
- 无硬编码密码
- 无硬编码 tokens
- 所有密钥使用环境变量
- 敏感配置已加密存储
✓ 正确示例:
use std::env;
let api_key = env::var("OPENAI_API_KEY")
.context("OPENAI_API_KEY 环境变量未设置")?;
✗ 错误示例:
const API_KEY: &str = "sk-1234567890"; // ✗ 硬编码密钥
2. Tauri 命令安全 ✓
- 所有命令参数已验证
- 使用 validator crate 验证输入
- 敏感操作有权限检查
- 错误消息不暴露内部信息
✓ 正确示例:
use validator::Validate;
#[derive(Deserialize, Validate, Type)]
pub struct CreateFormulaDto {
#[validate(length(min = 2, max = 50))]
pub name: String,
#[validate(length(equal = 3))]
pub species_code: String,
}
#[tauri::command]
#[specta::specta]
pub async fn create_formula(
dto: CreateFormulaDto,
state: State<'_, TauriAppState>,
) -> ApiResponse<Formula> {
// 验证输入
if let Err(e) = dto.validate() {
return api_err(format!("输入验证失败: {}", e));
}
// 处理逻辑...
}
3. SQL 注入防护 ✓
- 使用 SQLx 参数化查询
- 禁止字符串拼接 SQL
- 动态查询使用 QueryBuilder
✓ 正确示例:
// 参数化查询
sqlx::query_as!(
Formula,
"SELECT * FROM formulas WHERE name = ?",
name
)
.fetch_one(&self.pool)
.await?;
// 动态查询使用 QueryBuilder
let mut query = QueryBuilder::new("SELECT * FROM formulas WHERE 1=1");
if let Some(name) = filters.name {
query.push(" AND name LIKE ");
query.push_bind(format!("%{}%", name));
}
✗ 错误示例:
// ✗ 字符串拼接 SQL
let sql = format!("SELECT * FROM formulas WHERE name = '{}'", name);
4. 输入验证 ✓
- 前端验证(第一道防线)
- 后端验证(必须有)
- 文件上传验证类型和大小
- 路径验证防止路径遍历
前端验证:
<Form.Item
name="name"
rules={[
{ required: true, message: '请输入配方名称' },
{ min: 2, max: 50, message: '名称长度为 2-50 个字符' },
{ pattern: /^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/, message: '只能包含中文、字母、数字、下划线和连字符' }
]}
>
<Input />
</Form.Item>
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 398 lines · 0 tokens per session scan A d49e1923ee77
security-review is a skill published in the GitHub repository cacr92/WeReply (6 stars, last pushed 7mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,681 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
local-ai-agents
Build local-first AI agents that run entirely on a developer workstation with Microsoft Foundry Local and Qwen function-calling models. Covers Small Language Models (SLMs), the OpenAI-compatible local endpoint, sandboxed local tools, local RAG with Chroma, local MCP servers, hybrid cloud/local routing, and the…
next-cache-components-adoption
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…
insight-error-page
Write or audit an insight-kind error page for the Next.js dev overlay. Use when creating a new errors/ .mdx page, auditing an existing one, or checking that a page matches the framework fix cards. Covers page structure, title alignment, FixCard cards with Copy prompt button, code snippets, terminology verification…
next-cache-components-optimizer
Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components / PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next/playwright instant() e2e and work it to green, one verified route at a time; the shipped test then…
next-partial-prefetching-adoption
Turn on Partial Prefetching in a Next.js app and work through the insights it surfaces. Use when the user wants to enable or adopt Partial Prefetching, flip the partialPrefetching flag, opt routes in with export const prefetch = 'partial', audit Link prefetch={true} behavior, preserve existing prefetched UI with…