【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)

这篇具有很好参考价值的文章主要介绍了【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力n年
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js🍒Three.js
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

Node.js系列文章目录

内容 参考链接
Node.js(一) 初识 Node.js
Node.js(二) Node.js——开发博客项目之接口
Node.js(三) Node.js——一文带你开发博客项目(使用假数据处理)
Node.js(四) Node.js——开发博客项目之MySQL基础
Node.js(五) Node.js——开发博客项目之API对接MySQL
Node.js(六) Node.js——开发博客项目之登录(前置知识)
Node.js(七) Node.js——开发博客项目之登录(对接完毕)
Node.js(八) Node.js——开发博客项目之联调
Node.js(九) Node.js——开发博客项目之日志


一、前言

前面,我们使用原生 nodejs 已经大体完成了 myblog 的项目,下面我们来学习一下如何为我们项目的安全保驾护航…

  • sql注入:窃取数据库内容
  • XSS攻击:窃取前端的 cookie 内容
  • 密码加密:保障用户信息安全(重要!)
  • 我们只关注通过 web server (nodejs)层面预防

二、安全

1、sql 注入攻击

  • 最原始、最简单的攻击,从有了 web2.0 就有了 sql 注入攻击
  • 攻击方式:输入一个 sql 片段,最终拼接成一段攻击代码
  • 预防措施:使用 mysql 的 escape 函数处理输入内容

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

修改 ./db/mysql.js 文件的导出内容

mysql.js

module.exports = {
    exec,
    escape: mysql.escape
}

修改 ./controller/user.js 文件的内容

user.js

引入的模块加上 escape,用户名和密码前面也要加上 escape,然后就是 sql 语句中 ${} 的引号去掉

// 改变
const { exec, escape } = require('../db/mysql')
// 登录(通过用户名和密码)
const login = (username, password) => {
    // 改变
    username = escape(username)
    password = escape(password)
    // 改变
    const sql = `
    select username, realname from users where username=${username} and password=${password}
    `
    console.log('sql is', sql)
    return exec(sql).then(rows => {
        return rows[0] || {}
    })
}

// 导出共享
module.exports = {
    login
}

至此,即可解决 sql 注入的问题…


2、xss 攻击

  • 攻击方式:在页面展示内容中掺杂 js 代码,以获取网页信息
  • 预防措施:转换生成 js 的特殊字符

当我们不进行 xxs 攻击预防时,比如:在创建博客的输入框中输入 <script>alert(1)</script>,则会执行

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

那么我们怎么解决呢?首先,安装 xxs 工具

npm i xxs

之后修改 .controller/blog.js 文件的代码

blog.js

导入 xss,并且使用到 title 中

const xss = require('xss')
...

const newBlog = (blogData = {}) => {
    // blogData 是一个博客对象,包含 title content author 属性
    const title = xss(blogData.title)
    ...
}

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql


3、加密算法

  • 万一数据库被用户攻破,最不应该泄露的就是用户信息
  • 攻击方式:获取用户名和密码,再去尝试登录其他系统(因为不少人的密码会重复使用到不同的地方)
  • 预防措施:将密码加密,即便拿到密码也不知道明文

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

那么我们怎么来解决呢?—— 使用 nodejs 提供的 crypto 库

在 utils.js 文件中新建 cryp.js 文件,进行加密算法

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

crpy.js

我们使用 md5 加密(一种加密方式)

// 加密库
const crypto = require('crypto')

// 密匙(一把钥匙,密码和钥匙一块加密)
const SECRET_KEY = 'Zahuopu_2023#'

// md5 加密(一种加密方式)
function md5(content) {
    // 创建 md5 加密
    let md5 = crypto.createHash('md5')
    // 以 16进制的形式返回输入内容的加密结果
    return md5.update(content).digest('hex')
}

// 加密函数
function genPassword(password) {
    // 字符串要包含 password 和 SECRET_KEY
    const str = `password=${password}&key=${SECRET_KEY}`
    return md5(str)
}

const result = genPassword('123')
console.log(result)

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

可以发现,我们加密后的密码是 32 位的

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

那么我们就要修改数据库中 password 的长度为 32 位

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql

接下来,我们来更改一下数据库中用户 zahuopu 的密码

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql


4、使用加密算法

首先我们把加密算法给导出

cryp.js

...

module.exports = {
    genPassword
}

之后我们修改 ./controller/user.js 的内容

user.js

const { exec, escape } = require('../db/mysql')
const { genPassword } = require('../utils/cryp')
// 登录(通过用户名和密码)
const login = (username, password) => {
    username = escape(username)
    
    // 生成加密密码
    password = genPassword(password)
    // 更改了一下此代码的位置,sql 中立马要用到预防 sql 注入
    password = escape(password)

    const sql = `
    select username, realname from users where username=${username} and password=${password}
    `
    console.log('sql is', sql)
    return exec(sql).then(rows => {
        return rows[0] || {}
    })
}

// 导出共享
module.exports = {
    login
}

之后回到登录界面,即可以成功登录

nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql


三、写在最后

至此,我们明白了 如何防止sql注入、如何预防xxs攻击、以及如何为密码加密 继续跟进学习吧!

后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】

如果你需要该项目的 源码,请通过本篇文章最下面的方式 加入 进来~~


nodejs sql防止注入,node.js+express+koa2博客项目,node.js,安全,sql文章来源地址https://www.toymoban.com/news/detail-778054.html


到了这里,关于【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Node.js实战】一文带你开发博客项目之Express重构(博客的增删查改、morgan写日志)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年02月06日
    浏览(66)
  • 【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年01月16日
    浏览(48)
  • 【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿 offer(秋招) 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝Node.js 内容 参考链接 Node.js(一) 初识 Node.js DNS 解析,建

    2023年04月21日
    浏览(51)
  • Node.js博客项目开发思路笔记

    开发一个博客系统,具备博客基本功能 只开发 server 端,不关心前端 首页、作者页、博客详情页 登陆页 管理中心、新建页、编辑页 数据如何存储 博客 id title content createtime author 1 标题 1 内容 1 1111112 zhangsan 2 标题 2 内容 2 1111111 lisi 用户 id username password realname 1 zhangsan 123 张三

    2024年02月12日
    浏览(42)
  • 实战:Docker化Node.js项目

    Docker是一种轻量级的应用容器技术,可以将应用程序及其所有依赖项打包成一个可移植的容器,以便在任何支持Docker的环境中运行。Node.js是一种基于Chrome的JavaScript运行时,可以用于构建高性能和可扩展的网络应用程序。在现代软件开发中,将Node.js应用程序Docker化是一项重要

    2024年02月21日
    浏览(51)
  • Vue.js+Node.js开发实战就业反馈小程序-培训机构学员

     💖💖更多项目资源,最下方联系 IT实战课堂 ✨✨✨✨✨✨ 博主拥有多年的T技术研发项目架构和教学经验,CSDN/51CTO/腾讯课堂等平台优质作者、高级讲师,培训机构联合创始人!现专注项目定制Java、小程序、前端网页、Python、App、NodeJs、PHP、微服务、NET等远程部署、售后答

    2024年02月20日
    浏览(54)
  • 【node进阶】一文带你快速入门koa框架

    ✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️ 💯 刷题网站:这段时间有许多的小伙伴在问有没有什么

    2024年01月22日
    浏览(55)
  • 6.php开发-个人博客项目&Tp框架&路由访问&安全写法&历史漏洞

    目录 知识点 php框架——TP URL访问 Index.php-放在控制器目录下 ​编辑 Test.php--要继承一下 带参数的—————— 加入数据库代码 --不过滤 --自己写过滤 --手册(官方)的过滤 用TP框架找漏洞: 如何判断网站是thinkphp? 黑盒: 白盒: php总结 ​ 1-基于TP框架入门安装搭建使用

    2024年01月25日
    浏览(54)
  • 4.php开发-个人博客项目&登录验证&cookie&session&验证码安全

    目录 4.php开发-个人博客项目登录验证cookiesession验证码安全 知识点 本节大纲思路 ——这里以我自己的为例—— cookie验证—————— login1.php-登录后台界面 login_check.php-检查,作为包含文件 add_news.php-后台界面 php编码 如何创建 Cookie?--setcookie() 语法 实例 1 php header跳转 演示

    2024年01月23日
    浏览(44)
  • 4.php开发-个人博客项目&登录验证&cookie&session&验证码安全​

    目录 知识点 本节大纲思路 ——这里以我自己的为例—— cookie验证—————— login1.php-登录后台界面 login_check.php-检查,作为包含文件 add_news.php-后台界面 php编码 如何创建 Cookie?--setcookie() 语法 实例 1 php header跳转 演示案例-cookie验证脆弱问题 session验证—————— sess

    2024年01月25日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包