node日志<script><alert>111</alert></script>
写日志 封装和读取
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const fs = require('fs') const path = require('path') // 写日志 function writeLog(writeStream, log) { writeStream.write(log + '\n') // 关键代码 } // 生成 write Stream function createWriteStream(fileName) { const fullFileName = path.join(__dirname, '../', '../', 'logs', fileName) const writeStream = fs.createWriteStream(fullFileName, { flags: 'a' }) return writeStream } // 写访问日志 const accessWriteStream = createWriteStream('access.log') function access(log) { writeLog(accessWriteStream, log) } module.exports = { access }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const fs = require('fs') const path = require('path') const readline = require('readline') // 文件名 const fileName = path.join(__dirname, '../', '../', 'logs', 'access.log') // 创建 read stream const readStream = fs.createReadStream(fileName) // 创建 readline 对象 const rl = readline.createInterface({ input: readStream }) let chromeNum = 0 let sum = 0 // 逐行读取 rl.on('line', (lineData) => { if (!lineData) { return } // 记录总行数 sum++ const arr = lineData.split(' -- ') if (arr[2] && arr[2].indexOf('Chrome') > 0) { // 累加 chrome 的数量 chromeNum++ } }) // 监听读取完成 rl.on('close', () => { console.log('chrome 占比:' + chromeNum / sum) })
安全
sql注入:窃取数据库内容
xss攻击:窃取前端的cookie内容
密码加密:保障用户信息安全
npm i xss --save
密码加密
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const crypto = require('crypto') // 密匙 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 }