05——博客项目之安全 01

1.安全

1.安全

  • sql注入:窃取数据库内容
  • xss攻击: 窃取前端的cookie 内容
  • 密码加密: 保障用户信息安全(重要)
  • server 端攻击方式非常多,预防手段非常多

sql 注入

  • 最原始、最简单的攻击,从有了web2.0 就有了sql注入攻击
  • 攻击方式:输入了一个sql片段,最终拼接成一段攻击代码
  • 预防措施: 使用 mysql 的 escape 函数处理输入内容即可
slelct username, realname from users where username='zhangsan' -- and password='123'

由于 – 是 sql的注释,就可以直接登陆了。

mysql.js

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

escape是mysql的函数,可直接导出。

router/user.js

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
}

1.通过esacpe()处理变量
2.拼接sql语句的时候要’${username}’ => ${username},去掉引号

xss 攻击

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

在这里插入图片描述
在这里插入图片描述
就能获取到我们的cookie了。

解决措施

npm i xss --save

controller/blog.js

const xss = require('xss')
...
const newBlog = (blogData = {}) => {
    const title = xss(blogData.title)
    const content = blogData.content
    const author = blogData.author
    const createTime = Date.now()

xss是一个函数,用xss()包裹变量即可。

密码加密

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

cryp.js

const crypto = require('crypto')  //nodejs提供的加密库

// 密匙
const SECRET_KEY = 'wJiol_8776#' // 随机取即可

// md5加密
function md5 (content) {
    let md5 = crypto.createHash('md5')
    return md5.update(content).digest('hex')
}

// 加密函数
function genPassword(password) {
    const str = `password=${password}&key=${SECRET_KEY}`
    return md5(str)
}

module.exports = {
    genPassword
}

使用

controller/user.js

const { genPassword} = require('../utils/cryp')
...
// 生成加密密码
password = genPassword(password)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值