热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
对指定编程语言代码进行多维度审查,包括安全性、性能、错误处理和风格一致性,并提供具体改进建议,帮助开发者提升代码质量、可维护性和运行效率,适用于代码审核和优化场景。
以下从安全性、性能、错误处理、风格一致性与可维护性五个维度给出审查意见与可落地的改进建议。优先级标注为[高]、[中]、[低]。
安全性
性能
错误处理
风格一致性
可维护性
关键改动示例(节选,展示做法)
安全字段解析与参数化查询
使用 POST + JSON、密码哈希、加密安全 token
数据库连接与清理(Flask 推荐模式)
统一响应与日志
其他注意点
以上调整能在不大幅改动业务逻辑的情况下显著提升安全性、稳健性与可维护性。建议先落地高优先级项(移除 eval、参数化查询、POST+JSON、密码哈希、关闭 debug、配置不回传、加密安全 token、统一错误码与日志),再逐步推进结构化与工程化优化。
以下为按维度划分的审查与改进建议,并附一段更安全/可维护的示例重构代码(选取关键点演示)。
一、安全性
二、性能
三、错误处理
四、风格一致性
五、可维护性
示例重构(节选,展示关键修复思路) 说明:演示安全校验、参数化、防注入、取消 exec、SSRF 防护、超时与限流等。依赖:helmet、express-rate-limit、bcrypt、axios、zod。
const express = require('express'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); const bcrypt = require('bcrypt'); const crypto = require('crypto'); const axios = require('axios'); const http = require('http'); const https = require('https'); const path = require('path'); const fs = require('fs/promises'); const { z } = require('zod'); const { URL } = require('url');
const app = express(); app.disable('x-powered-by'); app.use(helmet()); app.use(express.json({ limit: '32kb' })); app.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));
// 配置加载一次 const config = { allowedFetchHosts: ['example.com'], baseDir: path.resolve('/var/app/data') };
// 统一错误处理中间件 function errorHandler(err, req, res, next) { console.error(err); const status = err.statusCode || 500; res.status(status).json({ ok: false, error: err.publicMessage || 'internal_error' }); } function badRequest(msg) { const e = new Error(msg); e.statusCode = 400; e.publicMessage = msg; return e; }
// 登录:示例(伪数据库) const loginSchema = z.object({ user: z.string().min(1).max(64), pwd: z.string().min(8).max(256) }); app.post('/login', async (req, res, next) => { try { const { user, pwd } = loginSchema.parse(req.body || {}); // TODO: 从数据库按用户名查询(使用参数化查询) const dbUser = await fakeGetUser(user); // 返回 { passwordHash: '...' } if (!dbUser) throw badRequest('invalid_credentials'); const ok = await bcrypt.compare(pwd, dbUser.passwordHash); if (!ok) throw badRequest('invalid_credentials'); const token = crypto.randomBytes(32).toString('hex'); // 或签发 JWT res.json({ ok: true, token }); } catch (e) { next(e); } });
// fetch:SSRF 防护、超时、大小限制;目录列举使用 fs.readdir 替代 exec const fetchSchema = z.object({ url: z.string().url(), path: z.string().optional().default('') }); const axiosClient = axios.create({ timeout: 8000, maxRedirects: 3, maxContentLength: 1024 * 1024, httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }) }); app.get('/fetch', async (req, res, next) => { try { const { url, path: reqPath } = fetchSchema.parse(req.query); const u = new URL(url); if (!['http:', 'https:'].includes(u.protocol)) throw badRequest('unsupported_protocol'); if (!config.allowedFetchHosts.includes(u.hostname)) throw badRequest('host_not_allowed'); // 可选:解析 IP 并阻止内网/环回地址 const resp = await axiosClient.get(u.toString(), { responseType: 'text', validateStatus: s => s >= 200 && s < 400 });
const base = config.baseDir;
const resolved = path.resolve(base, '.' + path.sep + reqPath);
if (resolved !== base && !resolved.startsWith(base + path.sep)) throw badRequest('invalid_path');
const list = await fs.readdir(resolved);
res.json({ ok: true, data: resp.data, list });
} catch (e) { next(e); } });
app.use(errorHandler); app.listen(process.env.PORT || 3000, () => console.log('server on', process.env.PORT || 3000));
// 伪函数:演示 async function fakeGetUser(user) { // 实际应使用参数化查询从数据库读取 const passwordHash = await bcrypt.hash('P@ssw0rd!', 12); return { passwordHash }; }
若不便引入过多依赖,可先落地的最小改动
下面按维度给出问题点与改进建议,并附可参考的代码片段,优先解决数据竞争、SSRF、超时与资源泄漏等高危问题。
一、安全性
二、性能
三、错误处理
四、风格一致性
五、可维护性
六、其他
参考实现片段(展示关键修复思路,非完整程序):
并发安全的 store 与后台任务 type Server struct { hits atomic.Int64 mu sync.RWMutex store map[string]int client *http.Client fileLen atomic.Int64 }
func NewServer() *Server { s := &Server{ store: make(map[string]int), client: &http.Client{ Timeout: 5 * time.Second, Transport: &http.Transport{ MaxIdleConns: 100, MaxIdleConnsPerHost: 10, IdleConnTimeout: 90 * time.Second, }, }, } if fi, err := os.Stat("data.txt"); err == nil { s.fileLen.Store(fi.Size()) } return s; }
func (s *Server) background(ctx context.Context, tick time.Duration) { t := time.NewTicker(tick) defer t.Stop() for { select { case <-ctx.Done(): return case <-t.C: s.mu.Lock() for k := range s.store { s.store[k]++ } s.mu.Unlock() } } }
安全的 handler(校验、超时、builder、原子读、错误处理)
var keyRe = regexp.MustCompile(^[a-zA-Z0-9_-]{1,64}$)
func (s *Server) handler(w http.ResponseWriter, r *http.Request) { s.hits.Add(1)
key := r.URL.Query().Get("key")
if !keyRe.MatchString(key) {
http.Error(w, "invalid key", http.StatusBadRequest)
return
}
s.mu.Lock()
s.store[key]++
s.mu.Unlock()
dest := r.URL.Query().Get("url")
if dest != "" {
// SSRF 防护示意:只允许 https 且在白名单域名
u, err := url.Parse(dest)
if err == nil && (u.Scheme == "https" || u.Scheme == "http") && inAllowlist(u.Hostname()) {
ctx, cancel := context.WithTimeout(r.Context(), 3*time.Second)
defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil)
if err == nil {
if resp, err := s.client.Do(req); err == nil {
io.Copy(io.Discard, resp.Body)
resp.Body.Close()
}
}
}
}
var b strings.Builder
b.Grow(1000)
// 可用每请求私有 rand.Rand 提升并发性能
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 1000; i++ {
b.WriteByte('a' + byte(rnd.Intn(26)))
}
w.Header().Set("Content-Type", "application/json")
resp := map[string]interface{}{
"ok": true,
"hits": s.hits.Load(),
"file": s.fileLen.Load(), // 如需去敏可省略或模糊处理
"key": key,
"payload": b.String(),
}
if err := json.NewEncoder(w).Encode(resp); err != nil {
// 客户端断开等情况
log.Printf("write response error: %v", err)
}
}
带超时的 http.Server 与优雅关闭 func main() { srv := NewServer() mux := http.NewServeMux() mux.HandleFunc("/m", srv.handler)
httpSrv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
ReadHeaderTimeout: 3 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 60 * time.Second,
MaxHeaderBytes: 1 << 20,
}
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
go srv.background(ctx, 500*time.Millisecond)
go func() {
<-ctx.Done()
shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_ = httpSrv.Shutdown(shutdownCtx)
}()
log.Println("serving on :8080")
if err := httpSrv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("server error: %v", err)
}
}
快速整改优先级(从高到低):
通过采用角色扮演的方式,让AI模拟成为资深代码审查专家,从安全性、错误处理、风格一致性与性能等多维度对代码进行全面评估,帮助开发者快速发现潜在问题并得到明确的优化建议,从而提升代码质量和开发效率。
需要快速检查并优化代码质量的开发者,他们能够借助此工具发现潜在问题、提升开发效率。
需保证团队输出代码高质量与一致性,实现更规范、高效的协作开发流程。
关注代码中的安全漏洞,通过提示词能更方便地从代码层面排除潜在风险。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期