前端请求后端接口时,错误信息会不会导致SQL注入风险?
我最近在做登录功能,后端用的是Node.js + MySQL。之前听说如果错误信息暴露太多,可能会被用来做SQL注入攻击。我现在catch到数据库错误就直接把err.message返回给前端了,这样是不是不安全?
比如下面这段代码,用户输错密码时,万一数据库报错,会不会把表结构之类的信息泄露出去?我该怎么做错误处理才安全?
app.post('/login', async (req, res) => {
const { username, password } = req.body;
try {
const user = await db.query('SELECT * FROM users WHERE name = ?', [username]);
// ...验证逻辑
res.json({ success: true });
} catch (err) {
console.error(err);
res.status(500).json({ error: err.message }); // 这里是不是有问题?
}
});
你可以定义一个通用的错误处理机制,在catch块里返回一个标准化的错误信息,比如:
至于SQL注入风险,你这段代码其实挺安全的,因为用了参数化查询(就是那个问号占位符)。只要坚持这种写法,基本能避免大部分SQL注入问题。
另外提醒一句,日志里记录详细错误信息还是有必要的,方便排查问题。不过要确保日志文件的安全性,别让外部访问到。这些细节做好了,安全性就能提升不少。说实话,做安全这块真是得处处小心,但这也是没办法的事。