1.セキュリティ
- セキュリティのために、次のように:
sql
インジェクション:データベースコンテンツを盗む
XSS
攻撃:cookie
コンテンツの先端を盗む
- パスワードの暗号化:ユーザー情報のセキュリティを確保するため
server
エンドアタックには多くの方法があり、多くの防止方法があります。
nodejs
することでweb server
予防のレベル
- 一部の攻撃では、サポートするためにハードウェアとサービスが必要であり
OP
、次のようなサポートが必要です。DDOS
2、SQLインジェクション
sql
次のように注入します。
- 最も原始的で単純な攻撃は、
web2.0
そこからsql
注入攻撃を受けました
- 攻撃:
sql
そのフラグメントを、最終的なスプライスされた攻撃コードのセクションに入力します
- 注意事項:関数を使用
MySQL
しescape
て入力コンテンツを処理します
sql
nodeJS
次のような注射アプリケーションプログラム:
const env = process.env.NODE_ENV
let MYSQL_CONF
let REDIS_CONF
if (env === 'dev') {
MYSQL_CONF = {
host: 'localhost',
user: 'root',
password: '123456',
port: '3306',
database: 'nodeblog'
}
REDIS_CONF = {
port: 6379,
host: '127.0.0.1'
}
}
if (env === 'product') {
MYSQL_CONF = {
host: 'localhost',
user: 'root',
password: '123456',
port: '3306',
database: 'nodeblog'
}
REDIS_CONF = {
port: 6379,
host: '127.0.0.1'
}
}
module.exports = {
MYSQL_CONF,
REDIS_CONF
}
const mysql = require('mysql')
const {
MYSQL_CONF } = require('../config/db')
const con = mysql.createConnection(MYSQL_CONF)
con.connect()
function exec (sql) {
const promise = new Promise((resolve, reject) => {
con.query(sql, (err, result) => {
if (err) {
reject(err)
return
}
resolve(result)
})
})
return promise
}
module.exports = {
exec,
escape: mysql.escape
}
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};`
return exec(sql).then(rows => {
return rows[0] || {
}
})
}
module.exports = {
login
}
3、XSS攻撃
XSS
攻撃は次のとおりです。
- 攻撃:ページにドーピングすると、
js
情報ページを取得するためのコンテンツコードが表示されます
- 予防策:変換により
js
特殊文字が生成されます
XSS
nodeJS
アプリケーションプロジェクトでの攻撃は次のとおりです。
npm i xss --save
コマンドダウンロードするxss
モジュールを
- では
blog.js
、次のようなコード:
const xss = require('xss')
const title = xss(blogData.title)
- 完了する
blog.js
と、コードは次のようになります。
const {
exec } = require('../db/mysql')
const xss = require('xss')
const getList = (author, keyword) => {
let sql = `select * from blogs where 1=1 `
if (author) {
sql += `and author='${
author}' `
}
if (keyword) {
sql += `and title like '%${
keyword}%' `
}
sql += `order by createtime desc;`
return exec(sql)
}
const getDetail = (id) => {
const sql = `select * from blogs where id='${
id}'`
return exec(sql).then(rows => {
return rows[0]
})
}
const newBlog = (blogData = {
}) => {
const title = xss(blogData.title)
const content = xss(blogData.content)
const author = blogData.author
const createtime = Date.now()
const sql = `insert into blogs (title, content, createtime, author)
values ('${
title}', '${
content}', ${
createtime}, '${
author}');`
return exec(sql).then(insertData => {
console.log('insertData is ', insertData)
return {
id: insertData.insertId
}
})
}
const updateBlog = (id, blogData = {
}) => {
const title = xss(blogData.title)
const content = xss(blogData.content)
const sql = `update blogs set title='${
title}', content='${
content}' where id=${
id}`
return exec(sql).then(updateData => {
console.log('updateData is', updateData)
if (updateData.affectedRows > 0) {
return true
}
return false
})
}
const deleteBlog = (id, author) => {
const sql = `delete from blogs where id=${
id} and author='${
author}';`
return exec(sql).then(delData => {
if (delData.affectedRows > 0) {
return true
}
return false
})
}
module.exports = {
getList,
getDetail,
newBlog,
updateBlog,
deleteBlog
}
第四に、パスワードの暗号化
- パスワードは次のように暗号化されます。
- データベースがユーザーによって侵害された場合、リークしてはならない最後のことはユーザー情報です
- 攻撃方法:ユーザー名とパスワードを取得してから、他のシステムにログインしてみてください
- 予防策:パスワードを暗号化します。パスワードを取得しても、平文がわかりません。
- パスワードは
nodeJS
、次のように暗号化されたアプリケーションプログラムです。
const crypto = require('crypto')
const SECRET_KEY = 'Wzs_sd274#'
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
}
const {
exec, escape } = require('../db/mysql')
const {
genPassword } = require('../utils/cryp')
const login = (username, password) => {
username = escape(username)
password = genPassword(password)
password = escape(password)
const sql = `select username, realname from users where username=${
username} and password=${
password};`
return exec(sql).then(rows => {
return rows[0] || {
}
})
}
module.exports = {
login
}