热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
针对指定代码进行安全审查,识别潜在漏洞与不良编码实践,并提供可执行的修复方案与安全编码建议,帮助开发团队提升代码安全性和可靠性,适用于安全评估和代码审查流程。
以下是基于OWASP Top 10对这段JavaScript/Express代码的安全审查与加固建议,重点覆盖SQL注入与权限绕过,同时包含其他显著安全问题与修复方案。
主要问题与风险
可操作的修复与安全编码实践
示例修复(使用mysql2与bcrypt): const express = require('express'); const mysql2 = require('mysql2/promise'); const bcrypt = require('bcrypt'); const jwt = require('jsonwebtoken');
const app = express(); app.use(express.json());
const pool = mysql2.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, // 使用最小权限账户 password: process.env.DB_PASS, database: process.env.DB_NAME, connectionLimit: 10, ssl: process.env.DB_SSL === 'true' ? { rejectUnauthorized: true } : undefined });
function validateLoginInput(username, password) { if (typeof username !== 'string' || typeof password !== 'string') return false; if (username.length < 3 || username.length > 64) return false; if (password.length < 8 || password.length > 128) return false; return true; }
app.post('/login', async (req, res) => { try { const { username, password } = req.body; if (!validateLoginInput(username, password)) return res.status(400).send('invalid');
const [rows] = await pool.execute(
'SELECT id, username, role, password_hash FROM users WHERE username = ? LIMIT 1',
[username]
);
if (!rows.length) return res.status(401).send('invalid');
const user = rows[0];
const ok = await bcrypt.compare(password, user.password_hash);
if (!ok) return res.status(401).send('invalid');
const token = jwt.sign(
{ sub: user.id, role: user.role },
process.env.JWT_SECRET,
{
algorithm: 'HS256',
expiresIn: '15m', // 设置短期有效期
issuer: 'your-app',
audience: 'your-app-api'
}
);
res.json({ token });
} catch (e) { res.status(500).send('error'); } });
示例修复: function getTokenFromHeader(req) { const h = req.headers.authorization || ''; if (!h.startsWith('Bearer ')) return null; return h.slice(7); }
app.get('/profile', (req, res) => { try { const token = getTokenFromHeader(req); if (!token) return res.status(401).send('unauthorized');
const decoded = jwt.verify(token, process.env.JWT_SECRET, {
algorithms: ['HS256'],
issuer: 'your-app',
audience: 'your-app-api'
});
res.json({ userId: decoded.sub, role: decoded.role });
} catch (e) { res.status(401).send('unauthorized'); } });
app.get('/admin', async (req, res) => { try { const token = getTokenFromHeader(req); if (!token) return res.status(401).send('unauthorized');
const decoded = jwt.verify(token, process.env.JWT_SECRET, {
algorithms: ['HS256'],
issuer: 'your-app',
audience: 'your-app-api'
});
const [rows] = await pool.execute('SELECT role FROM users WHERE id = ? LIMIT 1', [decoded.sub]);
if (rows.length && rows[0].role === 'admin') {
return res.send('admin ok');
}
return res.status(403).send('forbidden');
} catch (e) { res.status(401).send('unauthorized'); } });
与OWASP Top 10的映射
结论 当前代码存在高风险的SQL注入与权限绕过问题,攻击者可通过构造输入获取数据库权限或伪造令牌提升为管理员。请按上述步骤进行参数化查询、密码哈希、严格JWT验证与密钥管理,并补充速率限制、输入校验和最小权限配置,以显著提升整体安全性。
以下是基于OWASP Top 10 的安全审查结论与修复建议。重点覆盖 XSS 与 CSRF,并补充相关的安全配置与最佳实践。
一、主要问题与风险评估
存储型 XSS(A03:2021-Injection / XSS)
CSRF(A01:2021-Broken Access Control / A05:2021-Security Misconfiguration)
其他安全问题(防护建议)
二、修复措施(优先级从高到低)
三、参考修复示例(节选)
示例代码: from flask import Flask, request, render_template, redirect, url_for, jsonify, session from flask_wtf.csrf import CSRFProtect from markupsafe import escape import os, re from decimal import Decimal import bleach
app = Flask(name) app.config.update( SECRET_KEY=os.environ.get("SECRET_KEY", os.urandom(32)), SESSION_COOKIE_HTTPONLY=True, SESSION_COOKIE_SECURE=True, # 生产中启用 HTTPS SESSION_COOKIE_SAMESITE='Lax' ) CSRFProtect(app)
comments = [] ALLOWED_TAGS = ['b', 'i', 'em', 'strong', 'a'] ALLOWED_ATTRS = {'a': ['href', 'title']} ALLOWED_PROTOCOLS = ['http', 'https']
@app.after_request def security_headers(resp): resp.headers['Content-Security-Policy'] = "default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'" resp.headers['X-Content-Type-Options'] = 'nosniff' resp.headers['X-Frame-Options'] = 'DENY' resp.headers['Referrer-Policy'] = 'same-origin' return resp
@app.route('/comment', methods=['GET', 'POST']) def comment(): if request.method == 'POST': raw = request.form.get('content', '') # 若不允许 HTML,可直接存储原文并在模板中 {{ c }} 输出 clean = bleach.clean(raw, tags=ALLOWED_TAGS, attributes=ALLOWED_ATTRS, protocols=ALLOWED_PROTOCOLS, strip=True) comments.append(clean) return redirect(url_for('comment')) return render_template('comments.html', comments=comments)
@app.route('/transfer', methods=['POST']) def transfer(): to = request.form.get('to', '') amount = request.form.get('amount', '') if not re.fullmatch(r'[A-Za-z0-9_]{1,32}', to or ''): return jsonify(error='invalid recipient'), 400 try: amt = Decimal(amount) if amt <= 0: raise ValueError() except Exception: return jsonify(error='invalid amount'), 400 user = session.get('user', 'anonymous') return jsonify(message=f'Transferred {str(amt)} from {user} to {to}')
if name == 'main': app.run(debug=False)
四、核对清单(实施后自测)
通过以上修改,可有效消除当前代码中的存储型 XSS 与 CSRF 漏洞,并符合 OWASP Top 10 对输入验证、输出编码、身份与会话管理以及安全配置的要求。
以下为针对所给 C++ 代码的安全审查与加固建议(参考 CERT 安全编码规范)。重点问题集中在缓冲区溢出与命令注入,并补充其他安全实践。
一、发现的问题与影响
二、可行修复方案 A. 在不改变数据结构前提下的最小变更修复
修复示例(C 风格): void readHeader(FILE* f, Record& r) { // 限定最大读取 63 字符,保留 NUL if (fscanf(f, "%63s", r.header) != 1) { // 处理错误/EOF r.header[0] = '\0'; // 可返回错误码或抛异常 } }
void loadPayload(FILE* f, Record& r) { // 直接读取到目标缓冲区,避免中间 tmp 再复制 if (!fgets(r.payload, sizeof(r.payload), f)) { r.payload[0] = '\0'; // 处理错误/EOF return; } // 去除行末换行 size_t len = strcspn(r.payload, "\r\n"); r.payload[len] = '\0'; }
B. C++ 方式的结构化重写(更推荐)
示例: struct Record { std::string header; std::string payload; };
bool readHeader(std::istream& in, Record& r) { std::string line; if (!std::getline(in, line)) return false; if (line.size() > 63) return false; // 超长则拒绝或截断 r.header = line; return true; }
bool loadPayload(std::istream& in, Record& r) { std::string line; if (!std::getline(in, line)) return false; if (line.size() > 255) return false; r.payload = line; return true; }
C. 移除/替代 system 调用(强制建议)
D. I/O 与错误处理
E. 额外防护与工程实践
三、简化后的主程序建议
示例(C 版本,保留原结构,去除 system):
int main(int argc, char** argv) {
if (argc < 2) {
std::cout << "Usage: parser
// 输出前净化(示意)
// sanitize(r.header); sanitize(r.payload);
std::cout << "Header: " << r.header << "\n";
std::cout << "Payload: " << r.payload << "\n";
return 0;
}
四、结论
帮助开发者快速检测代码潜在安全漏洞,并提供专业、可操作的修复建议,提升代码整体安全性,减少安全隐患,保障产品稳定性。
帮助开发者进行代码自检,快速发现并修复潜在的安全漏洞,从而提升编码质量和产品安全性。
为安全专家提供系统化的代码安全分析,保护企业敏感数据安全,降低业务风险。
协助技术领导者优化团队代码质量审查流程,全面提升团队开发效率与代码安全水准。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期