Jadual Kandungan
Kaedah pencegahan
Rumah hujung hadapan web tutorial js Artikel yang menerangkan suntikan SQL Node mysql

Artikel yang menerangkan suntikan SQL Node mysql

Nov 14, 2022 pm 08:10 PM
node.js hujung belakang

Artikel yang menerangkan suntikan SQL Node mysql

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]

Halaman belakang secara tidak sengaja akan menyambung

yang dihantar dari hujung hadapan ke SQL语句nya sendiri dan akhirnya menyambungkannya menjadi kod serangan . SQL语句

Jadi langkah berjaga-jaga mesti diambil, jika tidak mungkin berlaku kebocoran data atau pemadaman pangkalan data.

Demonstrasi suntikan SQL

Ambil log masuk sebagai contoh, saya menambah jadual

dalam MySQL untuk menyimpan nama pengguna dan kata laluan. users

Dalam jadual

, saya mencipta sekeping data: userskata laluaninsert into users (username, , realname) values ('leihou', '123', '雷猴');

Data bermaksud:

  • username: 'leihou'
  • password: '123'
  • realname: '雷猴'
Pada masa ini, dalam

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] || {}
  })
}
Salin selepas log masuk
Di atas adalah kaedah log masuk.

Akhir sekali, anda boleh mencipta antara muka untuk bahagian hadapan melalui kaedah yang disebut dalam

"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

Jika anda malas, anda boleh terus menggunakan ujian

postman

Artikel yang menerangkan suntikan SQL Node mysql

Mengikut

Kaedah Log masuk di atas kita boleh tahu bahawa input bahagian hadapan adalah seperti berikut Kandungan akan membolehkan anda log masuk dengan jayanya

    Nama pengguna: leihou
  • Kata Laluan: 123
Tetapi jika pada masa ini, nama pengguna yang dimasukkan ialah

, Perhatikan bahawa terdapat ruang sebelum dan selepas leihou' -- . Kemudian kata laluan boleh dimasukkan secara santai. --

Pernyataan terakhir

yang disambungkan ialah SQLselect username, realname from users where username='leihou' -- ' and password='aslkfjsaf';

Perhatikan bahawa saya memasukkan kata laluan secara santai.

Dalam

, MySQL mewakili maksud anotasi. Maka pernyataan di atas menjadi -- . Sememangnya, kata laluan dipintas. 查询 username 为 leihou 的那条数据

Kandungan

yang dimasukkan di atas memintas maklumat log masuk dan membocorkan. Tetapi jika orang lain mahu memadamkan jadual anda, akibatnya akan menjadi sangat serius. username

Sebagai contoh, masukkan:

dalam kotak input nama pengguna. leihou'; delete from users; --

secara langsung memadamkan senarai

. users

Kaedah pencegahan

Ia benar-benar terlalu lama, lebih daripada sepuluh tahun. Jadi kaedah daya tindak asas adalah matang. SQL注入攻击

Sebagai contoh, alih kod rentetan yang dihantar dari hujung hadapan.

Gunakan

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] || {}
  })
}
Salin selepas log masuk
Rentetan yang ditapis menggunakan kaedah

akan terlepas. escape

Jika nama pengguna memasukkan

pada masa ini, kandungan berikut akan dicetak pada konsol bahagian belakang: leihou' --

select username, realname from users where username='leihou\' -- ' and password='123345';
Salin selepas log masuk
Anda boleh melihat bahawa petikan tunggal selepas

ialah melarikan diri. leihou'

Di atas adalah cara untuk

mencegah MySQL. SQL注入攻击

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Mar 29, 2023 pm 06:02 PM

Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Artikel tentang kawalan memori dalam Node Artikel tentang kawalan memori dalam Node Apr 26, 2023 pm 05:37 PM

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Mari bercakap secara mendalam tentang modul Fail dalam Node Mari bercakap secara mendalam tentang modul Fail dalam Node Apr 24, 2023 pm 05:49 PM

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

12 perkara yang perlu diberi perhatian apabila berkongsi dokumen reka bentuk antara muka 12 perkara yang perlu diberi perhatian apabila berkongsi dokumen reka bentuk antara muka Apr 24, 2023 am 10:58 AM

Apabila saya menyemak dokumen antara muka baru-baru ini, saya mendapati bahawa parameter yang ditakrifkan oleh rakan kongsi kecil ialah nilai penghitungan, tetapi dokumen antara muka tidak memberikan nilai penghitungan khusus yang sepadan. Sebenarnya, cara menulis dokumen antara muka dengan baik adalah sangat penting. Hari ini, Saudara Tianluo membawakan anda 12 mata untuk diberi perhatian dalam dokumen reka bentuk antara muka~

Pemahaman mendalam tentang generik dalam golang (Generik) Pemahaman mendalam tentang generik dalam golang (Generik) Apr 11, 2023 pm 07:20 PM

Perkara yang dibawa oleh artikel ini kepada anda ialah pemahaman mendalam tentang generik dalam golang? Bagaimana untuk menggunakan generik? Ia mempunyai nilai rujukan tertentu Rakan-rakan yang memerlukan boleh merujuk kepadanya.

Mari kita bincangkan tentang gelung acara dalam Node Mari kita bincangkan tentang gelung acara dalam Node Apr 11, 2023 pm 07:08 PM

Gelung peristiwa ialah bahagian asas Node.js dan mendayakan pengaturcaraan tak segerak dengan memastikan bahawa utas utama tidak disekat Memahami gelung peristiwa adalah penting untuk membina aplikasi yang cekap. Artikel berikut akan memberi anda pemahaman yang mendalam tentang gelung acara dalam Node.

Ketahui lebih lanjut tentang Penampan dalam Node Ketahui lebih lanjut tentang Penampan dalam Node Apr 25, 2023 pm 07:49 PM

Pada mulanya, JS hanya berjalan pada bahagian penyemak imbas Mudah untuk memproses rentetan berkod Unikod, tetapi sukar untuk memproses rentetan binari dan bukan berkod Unikod. Dan binari ialah format data peringkat terendah komputer, video/audio/program/pakej rangkaian

Ketahui tentang pakej tidak selamat di Golang Ketahui tentang pakej tidak selamat di Golang Apr 02, 2023 am 08:30 AM

Dalam sesetengah perpustakaan peringkat rendah, anda sering melihat penggunaan pakej yang tidak selamat. Artikel ini akan membawa anda memahami pakej tidak selamat di Golang, memperkenalkan peranan pakej tidak selamat dan cara menggunakan Pointer saya harap ia akan membantu anda!

See all articles