Mô-đun cấp tốc này phát hiện các cuộc tấn công tiêm nhiễm sql và ngăn chặn chúng bằng cách gửi 403 dưới dạng phản hồi. Mô-đun kiểm tra chuỗi truy vấn, thông số tuyến đường và nội dung cho bất kỳ nội dung nào liên quan đến sql injection
var app = express[]; var sqlinjection = require['sql-injection']; app.use[sqlinjection];
Cài đặt
$ npm install sql-injection
Cách sử dụng
ví dụ về mã
var express = require['express']; var sqlinjection = require['sql-injection']; var app = express[]; app.configure[function[] { app.use[sqlinjection]; // add sql-injection middleware here }]; app.get['/route1', function[req, res] { res.send[200, {}]; }]; app.get['/route2/:uid', function[req, res] { res.send[200, {}]; }]; app.post['/route3', function[req, res] { res.send[200, {}]; }]; app.listen[3000];
SQL injection là một vấn đề nghiêm trọng đối với các nhà phát triển web. Nó liên quan đến việc nhập một truy vấn con SQL thay cho giá trị truy vấn chính, sau đó cơ sở dữ liệu có thể xử lý sai truy vấn này
Dưới đây chúng tôi trình bày 3 cách để bảo vệ chống lại SQL injection Attack
- phương pháp
escape[]
- giữ chỗ
- trình giữ chỗ được đặt tên - gói npm bên ngoài
Trong mỗi trường hợp, chúng tôi sẽ cố gắng chuyển truy vấn '_______6_______'
Ghi chú. Ở cuối bài viết này, bạn sẽ tìm thấy một số tệp chuẩn bị cơ sở dữ liệu mà bạn có thể thực hành trên đó
1. phương thức thoát []
Cách đầu tiên là sử dụng phương thức connection.escape[]
, trong đó các đối số là một giá trị mà chúng tôi đang nhận được từ người dùng, vì vậy đối số có thể không an toàn
Bước tiếp theo là chuyển truy vấn đến phương thức gửi truy vấn đến cơ sở dữ liệu
const mysql = require['mysql'];
const connection = mysql.createConnection[{ // gets connection with database
host: 'localhost', // '127.0.0.1'
user: 'root',
password: 'password',
database: 'my_database',
}];
connection.connect[error => {
if [error] throw error;
const value = 3700; // SELECT * FROM `users` WHERE `salary` < 3700
const query = 'SELECT * FROM `users` WHERE `salary` < ' + connection.escape[value];
connection.query[query, [error, result] => { // sends queries and receives results
connection.end[]; // closes connection
if [error] throw error;
console.log[result];
}];
}];
2. Trình giữ chỗ
Trong trường hợp này, chúng tôi tạo một truy vấn có dấu chấm hỏi ở những nơi chúng tôi muốn chèn nội dung nào đó. các giá trị trong mảng được chèn theo thứ tự mà chúng đã được thông qua
Ghi chú. ?
const mysql = require['mysql'];
const connection = mysql.createConnection[{ // gets connection with database
host: 'localhost', // '127.0.0.1'
user: 'root',
password: 'password',
database: 'my_database',
}];
connection.connect[[error] => {
if [error] throw error;
const query = 'SELECT * FROM ?? WHERE `salary` < ?';
const values = ['users', 3700]; // SELECT * FROM `users` WHERE `salary` < 3700
connection.query[query, values, [error, result] => { // sends queries and receives results
connection.end[]; // closes connection
if [error] throw error;
console.log[result];
}];
}];
3. giữ chỗ được đặt tên
Cách cuối cùng là sử dụng gói npm bên ngoài - named-placeholders
. Nó tương tự như phương pháp trước, nhưng trong trường hợp này, chúng tôi có nhiều quyền kiểm soát hơn đối với đơn đặt hàng và những gì sẽ được thông qua