【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
    		       		warning:
    		            这篇文章距离上次修改已过448天,其中的内容可能已经有所变动。
    		        
        		                
                
// 导入数据库操作模块
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攻击。这些安全措施显著提高了应用程序的安全性。
评论已关闭