Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >pertahanan pangkalan data pertanyaan nodejs
Kaedah untuk mencegah suntikan SQL
Dengan perkembangan pesat Internet, interaksi data antara aplikasi menjadi semakin kerap, penggunaan pangkalan data menjadi semakin penting, dan serangan suntikan SQL semakin menjadi. semakin berleluasa. Suntikan SQL bermakna penggodam menyuntik kod berniat jahat ke dalam pernyataan SQL aplikasi Apabila data dihantar ke pangkalan data, kod berniat jahat boleh dilaksanakan, menyebabkan data pangkalan data dibocorkan atau diganggu, sangat merosakkan keselamatan sistem. . Untuk mengelakkan suntikan SQL, Node.js juga perlu mengambil langkah berjaga-jaga yang sepadan apabila menyambung ke pangkalan data Artikel ini akan memperkenalkan beberapa kaedah pencegahan biasa.
1.SQL parameterization
SQL parameterization ialah salah satu kaedah yang lebih biasa untuk menghalang serangan suntikan SQL. Prinsipnya adalah untuk memisahkan parameter dan nilai dalam pernyataan SQL, mengekod parameter, dan memisahkannya dengan aksara khas sebelum dihantar ke pangkalan data. Dengan cara ini, walaupun serangan penggodam menyuntik pernyataan SQL yang berniat jahat, pangkalan data akan memprosesnya sebagai parameter dan bukannya sebahagian daripada pernyataan SQL, sekali gus meningkatkan keselamatan pangkalan data.
Dalam Node.js, anda boleh menggunakan modul pertanyaan berparameter seperti pg-promise atau mysql2, dsb. Contohnya adalah seperti berikut:
const pgp = require('pg-promise')(); const db = pgp('postgres://username:password@host:port/database'); const query = 'SELECT * FROM users WHERE name = ${name} AND age = ${age}'; const values = {name: 'Jack', age: 20}; db.any(query, values).then(data => { console.log(data); }).catch(error => { console.log(error); });
Sebagai amalan pengaturcaraan yang selamat, ia harus diambil perhatian Mengikut prinsip kebenaran paling sedikit, adalah idea yang baik untuk mengesahkan data yang dibekalkan pengguna sebelum melakukan pencarian semula/pertanyaan. Pastikan jenis dan skop mereka, dan sama ada pengguna mempunyai akses kepada data yang dikaitkan dengan mereka.
2. Pengesahan dan penapisan input
Pengesahan input ialah langkah penting sebelum data dihantar ke pelayan. Matlamatnya adalah untuk memastikan bahawa data input dibentuk dengan baik dan tidak mengandungi kod hasad.
Sebagai contoh, sebelum melakukan operasi sisipan/kemas kini pada data yang diserahkan pengguna, pelbagai aspek seperti jenis, julat dan format data input boleh disemak untuk memastikan bahawa data input betul-betul sepadan dengan yang dijangkakan. jenis data.
Selain itu, ia juga perlu menapis aksara haram dalam data. Aksara ini mungkin mengandungi teg HTML dengan serpihan pernyataan SQL atau kod JavaScript yang berniat jahat. Node.js menyediakan pelbagai modul, seperti pengesah, dsb., yang boleh digunakan untuk menapis dan mengesahkan data input.
Berikut ialah contoh penggunaan validator:
const validator = require('validator'); const email = 'example.com'; if (!validator.isEmail(email)) { console.log('Invalid email'); }
3 Cegah penyambungan penyataan SQL
Salah satu senario yang paling biasa bagi serangan suntikan SQL ialah menggunakan SQL penyambungan rentetan. dalam pernyataan program, dengan itu membenamkan data yang tidak selamat. Penyerang boleh merosakkan keseluruhan pertanyaan atau mendapatkan data sensitif dengan memasukkan beberapa kod.
Contohnya:
const query = 'SELECT * FROM users WHERE name = ' + name + ' AND age = ' + age;
Cara penulisan ini sangat berbahaya kerana penyerang boleh menyerahkan nilai parameter seperti "name = 'xxx; DROP TABLE users;'" dan kemudian keseluruhan pertanyaan akan tukar Menjadi:
SELECT * FROM users WHERE name = xxx; DROP TABLE users; AND age > 20;
Pernyataan ini akan memadamkan jadual "pengguna" Dalam kes ini, pengesahan input dan pertanyaan berparameter kami tidak bermakna.
Oleh itu, amalan terbaik ialah menggunakan pertanyaan berparameter dan bukannya penggabungan rentetan. Terdapat banyak perpustakaan manipulasi ORM dan SQL dalam Node.js yang boleh digunakan untuk mengelakkan penyatuan rentetan pernyataan SQL.
4. Kurangkan kebenaran pangkalan data
Untuk meminimumkan ancaman pangkalan data yang disebabkan oleh serangan suntikan SQL, kami boleh mengurangkan kebenaran pengguna pangkalan data ke tahap minimum. Pentadbir pangkalan data boleh mengehadkan kebenaran menyambungkan pengguna untuk mengelakkan penyalahgunaan atau operasi berniat jahat.
Sebagai contoh, anda boleh mencipta peranan pangkalan data yang berbeza untuk pengguna yang berbeza dan memberi mereka kebenaran yang berbeza, seperti membaca data atau menulis data, dsb., dengan itu mengehadkan kawalan mereka ke atas pangkalan data. Cara paling mudah untuk mengehadkan operasi yang boleh dilakukan oleh pengguna pangkalan data ialah melalui pernyataan SQL GRANT dan REVOKE.
Artikel ini memperkenalkan beberapa kaedah biasa untuk mencegah serangan suntikan SQL. Walaupun dalam amalan, kaedah di atas tidak memastikan keselamatan 100%, amalan terbaik keselamatan ini boleh meminimumkan risiko aplikasi yang mengalami serangan suntikan SQL. Sebagai pembangun Node.js, kita harus sentiasa mengingati kepentingan mencegah suntikan SQL apabila melakukan operasi pangkalan data.
Atas ialah kandungan terperinci pertahanan pangkalan data pertanyaan nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!