Nodejs mysql sql injection

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

Làm cách nào để ngăn SQL injection trong MySQL nodejs?

Ngăn chặn tấn công SQL injection .
Không cho phép nhiều câu lệnh
Sử dụng trình giữ chỗ thay vì nội suy biến
Xác thực đầu vào của người dùng
Dữ liệu nhập của người dùng trong danh sách cho phép

Có thể tiêm SQL trong nút JS không?

Trong khi nút. js có thể giúp cải thiện năng suất của nhà phát triển, nó dễ bị lỗi SQL injection nhiều như bất kỳ ngôn ngữ lập trình hiện đại nào khác được sử dụng ngày nay . Trong bài viết này, chúng ta sẽ tìm hiểu về sự cố SQL injection, tác động của nó và cách khắc phục.

Có thể tiêm SQL trong MySQL không?

Với MySQL, các truy vấn theo đợt thường không thể được sử dụng để tiêm SQL . Tuy nhiên, điều này đôi khi có thể xảy ra nếu ứng dụng đích sử dụng một số API PHP hoặc Python nhất định để giao tiếp với cơ sở dữ liệu MySQL.

Làm cách nào để tránh SQL injection trong TypeScript?

Tóm tắt. Cách ngăn chặn TypeScript SQL Injection . Tránh các gói không an toàn có quyền truy cập vào cơ sở dữ liệu. Tận dụng các tính năng giám sát bảo mật của ứng dụng. Thực thi các chính sách bảo mật và các phương pháp hay nhất với nhóm của bạn. Ensure that your Model layer properly uses placeholders. Avoid insecure packages that have access to the database. Make use of application security monitoring features. Enforce security policies and best practices with your team.