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

个人简介

👀个人主页:前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力n年

🥇推荐学习:🍍前端面试宝典
🍉Vue2
🍋Vue3
🍓Vue2&Vue3项目实战
🥝Node.js🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习 &资源分享,快加入进来吧

Node.js系列文章目录

内容参考链接
Node.js(一)[初识
Node.js](https://zahuopu.blog.csdn.net/article/details/127278376)
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——开发博客项目之日志

文章目录
  • Node.js系列文章目录
  • * 一、前言
    
    • 二、安全
    •   * 1、sql 注入攻击
      
      • 2、xss 攻击
      • 3、加密算法
      • 4、使用加密算法
    • 三、写在最后

一、前言

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

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

二、安全

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

在这里插入图片描述

修改 ./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>,则会执行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

那么我们怎么解决呢?首先,安装 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)
    ...
}

在这里插入图片描述

在这里插入图片描述


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

在这里插入图片描述

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

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

在这里插入图片描述

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)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述


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
}

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

在这里插入图片描述


三、写在最后

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

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

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


在这里插入图片描述


题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

2023届全国高校毕业生预计达到1158万人,就业形势严峻;

国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。

网络安全行业特点

1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

img

2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
img

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

  • 34
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值