// 导入数据库操作模块
const db = require('../db/index');
// 用户注册
exports.reg = (username, password, nickname, callback) => {
// 使用预处理语句防止SQL注入
const regSql = 'INSERT INTO blog_user (username, password, nickname) VALUES (?, ?, ?)';
db.query(regSql, [username, md5(password), nickname], (err, result) => {
if (err) {
callback(err, null);
} else {
callback(null, result);
}
});
};
// 用户登录
exports.login = (username, password, callback) => {
// 使用预处理语句防止SQL注入
const loginSql = 'SELECT * FROM blog_user WHERE username = ?';
db.query(loginSql, [username], (err, result) => {
if (err) {
callback(err, null);
} else {
if (result.length === 1 && md5(password) === result[0].password) {
callback(null, result[0]);
} else {
callback(null, null);
}
}
});
};
// 用户信息更新
exports.update = (user, callback) => {
// 清理HTML标签防止XSS攻击
user.nickname = xss(user.nickname);
const updateSql = 'UPDATE blog_user SET nickname = ? WHERE id = ?';
db.query(updateSql, [user.nickname, user.id], (err, result) => {
if (err) {
callback(err, null);
} else {
callback(null, result);
}
});
};
// 导入MD5加密模块
const crypto = require('crypto');
// 自定义md5加密函数
function md5(content) {
let md5 = crypto.createHash('md5');
return md5.update(content).digest('hex');
}
// 导入用于清理HTML标签的模块
const xss = require('xss');
在这个代码实例中,我们使用了预处理语句来防止SQL注入,同时对用户输入的数据进行了MD5加密。对于用户提交的内容,我们使用了xss
模块来清理可能存在的HTML标签,防止XSS攻击。这些安全措施显著提高了应用程序的安全性。