Table of Contents
SQL injection demonstration
Prevention methods
Home Web Front-end JS Tutorial An article explaining Node+mysql's SQL injection

An article explaining Node+mysql's SQL injection

Nov 14, 2022 pm 08:10 PM
node.js rear end

An article explaining Node+mysql's SQL injection

Although we will not directly use native NodeJS to develop the backend, it is still necessary to understand SQL injection.

This article uses NodeJS MySQL to explain SQL injection.

SQL injection attack is a very old attack method. There have been SQL injection attacks since the birth of web2.0. It usually appears in front-end components such as input box and text field. Add SQL statement to the input content and pass it to the background together. [Related tutorial recommendations: nodejs video tutorial]

If the background is not careful, the SQL statement passed from the front end will be spliced ​​into its own SQL statement, and finally spliced ​​into an attack code.

Therefore, precautions must be taken, otherwise data leakage may occur, or the database may even be deleted.

SQL injection demonstration

Take login as an example, I add a users table in MySQL to store users name and password.

In the users table, I created a piece of data: insert into users (username, password, realname) values ​​('leihou', '123 ', 'Thunder Monkey');

The data means:

  • username: 'leihou'
  • password: '123'
  • realname: 'Thunder Monkey'

At this time, in the NodeJS background, I Created a login method

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] || {}
  })
}
Copy after login

The above is the login method.

Finally, you can create an interface to the front end through the method mentioned in "NodeJS http request". Since the interface part is not the focus of this article, I am going to skip it here (let me be lazy).

At this time, create another HTML page, roughly generate some content, and then use Ajax to connect with the backend.

If you are lazy, you can directly use postman Test

An article explaining Node+mysqls SQL injection

##You can know according to the above

Login method , you can log in successfully by entering the following content on the front end

    Username: leihou
  • Password: 123
But if at this time, the username entered is

leihou' -- , note that there are spaces before and after --. Then the password can be entered casually.

The final spliced ​​

SQL statement is select username, realname from users where username='leihou' -- ' and password='aslkfjsaf';

Note that I entered the password casually.

In

MySQL, -- represents the meaning of comments. So the above statement becomes Query the data whose username is leihou. Naturally, the password is bypassed.

The content of

username entered above bypasses login and leaks information. But if someone else wants to delete your table, the consequences will be very serious.

For example, enter in the user name input box:

leihou'; delete from users; -- .

The

users table was deleted directly.

Prevention methods

SQL injection attack It is too old, more than ten years old. So the basic coping methods are mature.

For example, transcode the string passed from the front end.

Using

NodeJS The downloaded MySQL dependency package provides this method: 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] || {}
  })
}
Copy after login

The string filtered using the

escape method will be escaped.

At this time, if the user name enters

leihou' -- , the following content will be printed on the backend console:

select username, realname from users where username='leihou\' -- ' and password='123345';
Copy after login
You can see

leihou'# The single quotes following ## are escaped. The above are

MySQL

methods to prevent SQL injection attacks. For more node-related knowledge, please visit:

nodejs tutorial

!

The above is the detailed content of An article explaining Node+mysql's SQL injection. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Detailed graphic explanation of the memory and GC of the Node V8 engine Detailed graphic explanation of the memory and GC of the Node V8 engine Mar 29, 2023 pm 06:02 PM

This article will give you an in-depth understanding of the memory and garbage collector (GC) of the NodeJS V8 engine. I hope it will be helpful to you!

An article about memory control in Node An article about memory control in Node Apr 26, 2023 pm 05:37 PM

The Node service built based on non-blocking and event-driven has the advantage of low memory consumption and is very suitable for handling massive network requests. Under the premise of massive requests, issues related to "memory control" need to be considered. 1. V8’s garbage collection mechanism and memory limitations Js is controlled by the garbage collection machine

Let's talk in depth about the File module in Node Let's talk in depth about the File module in Node Apr 24, 2023 pm 05:49 PM

The file module is an encapsulation of underlying file operations, such as file reading/writing/opening/closing/delete adding, etc. The biggest feature of the file module is that all methods provide two versions of **synchronous** and **asynchronous**, with Methods with the sync suffix are all synchronization methods, and those without are all heterogeneous methods.

12 points to note when sharing interface design documents 12 points to note when sharing interface design documents Apr 24, 2023 am 10:58 AM

Recently, when I was reviewing the interface document, I found that the parameter defined by a small partner was an enumeration value, but the interface document did not give the corresponding specific enumeration value. In fact, how to write interface documents well is really important. Today, Brother Tianluo brings you 12 points to pay attention to in interface design documents~

In-depth understanding of generics in golang (Generic) In-depth understanding of generics in golang (Generic) Apr 11, 2023 pm 07:20 PM

What this article brings to you is an in-depth understanding of generics in golang? How to use generics? It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Let's talk about the event loop in Node Let's talk about the event loop in Node Apr 11, 2023 pm 07:08 PM

The event loop is a fundamental part of Node.js and enables asynchronous programming by ensuring that the main thread is not blocked. Understanding the event loop is crucial to building efficient applications. The following article will give you an in-depth understanding of the event loop in Node. I hope it will be helpful to you!

Learn more about Buffers in Node Learn more about Buffers in Node Apr 25, 2023 pm 07:49 PM

At the beginning, JS only ran on the browser side. It was easy to process Unicode-encoded strings, but it was difficult to process binary and non-Unicode-encoded strings. And binary is the lowest level data format of the computer, video/audio/program/network package

Learn about the unsafe package in Golang Learn about the unsafe package in Golang Apr 02, 2023 am 08:30 AM

In some low-level libraries, you often see the use of the unsafe package. This article will take you to understand the unsafe package in Golang, introduce the role of the unsafe package and how to use Pointer. I hope it will be helpful to you!

See all articles