Walaupun kami tidak akan terus menggunakan NodeJS asli untuk membangunkan bahagian belakang, ia masih perlu untuk memahami SQL注入
.
Artikel ini menggunakan NodeJS
MySQL
untuk menerangkan SQL注入
.
SQL注入攻击
ialah kaedah serangan yang sangat lama, ia telah wujud sejak web2.0
dilahirkan. Ia biasanya muncul dalam komponen bahagian hadapan seperti SQL注入攻击
kotak input dan medan teks. Tambahkan pada kandungan input dan hantarkannya ke latar belakang bersama-sama. [Tutorial berkaitan yang disyorkan: SQL语句
tutorial video nodejs]
yang dihantar dari hujung hadapan ke SQL语句
nya sendiri dan akhirnya menyambungkannya menjadi kod serangan . SQL语句
dalam MySQL
untuk menyimpan nama pengguna dan kata laluan. users
, saya mencipta sekeping data: users
kata laluaninsert into users (username,
, realname) values ('leihou', '123', '雷猴');
username: 'leihou'
password: '123'
realname: '雷猴'
latar belakang, saya mencipta kaedah log masuk NodeJS
const mysql = require('mysql') // 创建连接对象 const con = mysql.createConnection({ host: 'localhost', // 地址 user: 'root', // 连接数据库的用户 password: '123456', // 连接数据库的密码 port: '3306', // 默认端口 database: 'testdb' // 数据库名 }) // 开始连接 con.connect() // 统一执行 sql 的函数 function exec(sql) { const promise = new Promise((resolve, reject) => { con.query(sql, (err, result) => { if (err) { reject(err) return } resolve(result) }) }) return promise } // 登录方法 const login = (username, password) => { const sql = ` select username, realname from users where username='${username}' and password='${password}'; ` console.log(sql) return exec(sql).then(rows => { return rows[0] || {} }) }
"Permintaan http NodeJS". Oleh kerana bahagian antara muka bukan fokus artikel ini, saya akan melangkaunya di sini (biar saya malas).
Pada masa ini, buat satu lagi halaman, kira-kira hasilkan beberapa kandungan, kemudian gunakan HTML
untuk berhubung dengan bahagian belakang. Ajax
postman
Kaedah Log masuk di atas kita boleh tahu bahawa input bahagian hadapan adalah seperti berikut Kandungan akan membolehkan anda log masuk dengan jayanya
, Perhatikan bahawa terdapat ruang sebelum dan selepas leihou' --
. Kemudian kata laluan boleh dimasukkan secara santai. --
yang disambungkan ialah SQL
select username, realname from users where username='leihou' -- ' and password='aslkfjsaf';
, MySQL
mewakili maksud anotasi. Maka pernyataan di atas menjadi --
. Sememangnya, kata laluan dipintas. 查询 username 为 leihou 的那条数据
yang dimasukkan di atas memintas maklumat log masuk dan membocorkan. Tetapi jika orang lain mahu memadamkan jadual anda, akibatnya akan menjadi sangat serius. username
dalam kotak input nama pengguna. leihou'; delete from users; --
. users
Ia benar-benar terlalu lama, lebih daripada sepuluh tahun. Jadi kaedah daya tindak asas adalah matang. SQL注入攻击
untuk memuat turun pakej pergantungan NodeJS
Kaedah ini disediakan: MySQL
. escape
// 省略部分代码 const mysql = require('mysql') // 省略创建连接对象 // 省略开始连接 // 统一执行 sql 的函数 exec 方法 const escape = mysql.escape 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) return exec(sql).then(rows => { return rows[0] || {} }) }
akan terlepas. escape
pada masa ini, kandungan berikut akan dicetak pada konsol bahagian belakang: leihou' --
select username, realname from users where username='leihou\' -- ' and password='123345';
ialah melarikan diri. leihou'
mencegah MySQL
. SQL注入攻击
tutorial nodejs!
Atas ialah kandungan terperinci Artikel yang menerangkan suntikan SQL Node mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!