Rumah  >  Artikel  >  hujung hadapan web  >  pertahanan pangkalan data pertanyaan nodejs

pertahanan pangkalan data pertanyaan nodejs

王林
王林asal
2023-05-16 19:41:36477semak imbas

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!

Kenyataan:
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
Artikel sebelumnya:Cara menggunakan nodejsArtikel seterusnya:Cara menggunakan nodejs