웹 프론트엔드 JS 튜토리얼 node-mysql에서 SQL 주입을 방지하는 방법

node-mysql에서 SQL 주입을 방지하는 방법

Jun 30, 2018 am 11:38 AM
node nodejs SQL 주입 방지

SQL 주입이 웹사이트나 서버에 매우 위험한 문제라는 것은 누구나 알고 있습니다. 이 부분을 잘 처리하지 않으면 언제든지 웹사이트에 주입될 수 있으므로 이 글에서는 node-mysql에서 SQL 주입을 방지하는 방법을 요약합니다. 몇 가지 일반적인 주사 방법을 참조하십시오.

SQL 인젝션 소개

SQL 인젝션은 가장 일반적인 네트워크 공격 방법 중 하나로 운영체제의 BUG를 이용하여 공격을 구현하는 것이 아니라 프로그래밍 시 프로그래머의 과실을 표적으로 삼아 SQL을 사용한다. 계정으로 로그인하거나 데이터베이스를 조작할 수도 있습니다.

node-mysql에서 SQL 주입 방지

SQL 주입을 방지하기 위해 문자열을 직접 연결하는 대신 SQL에 전달된 매개변수를 인코딩할 수 있습니다. node-mysql에는 SQL 주입을 방지하는 네 가지 일반적인 방법이 있습니다.

방법 1: escape()를 사용하여 들어오는 매개변수를 인코딩합니다.

세 가지 매개변수 인코딩 방법이 있습니다.

mysql.escape(param)
connection.escape(param)
pool.escape(param)
로그인 후 복사

예:

var userId = 1, name = 'test';
var query = connection.query('SELECT * FROM users WHERE id = ' + connection.escape(userId) + ', name = ' + connection.escape(name), function(err, results) {
  // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'
로그인 후 복사

escape() 메서드 인코딩 규칙은 다음과 같습니다.

숫자는 변환되지 않습니다.

부울은 true/false로 변환됩니다. 'YYYY-mm-dd HH:ii:ss' 문자열;

버퍼는 X'0fa5'와 같은 16진수 문자열로 변환됩니다.

문자열은 안전하게 이스케이프됩니다. ['a', 'b']는 'a', 'b'로 변환됩니다.

다차원 배열은 [['a', 'b'], ['c'와 같은 그룹 목록으로 변환됩니다. , 'd' ]]는 'a', 'b'), ('c', 'd')로 변환됩니다.

객체는 키=값 쌍으로 변환됩니다. 중첩된 객체는 문자열로 변환됩니다.

정의되지 않은/null은 NULL로 변환됩니다.

MySQL은 NaN/Infinity를 지원하지 않으며 MySQL 오류를 발생시킵니다.


방법 2: Connection.query()의 쿼리 매개 변수 자리 표시자를 사용합니다.


쿼리 매개 변수 자리 표시자로 ?를 사용할 수 있습니다. 쿼리 매개변수 자리 표시자를 사용하는 경우 Connection.escape() 메서드가 내부적으로 자동으로 호출되어 들어오는 매개변수를 인코딩합니다. 예:

var userId = 1, name = 'test';
var query = connection.query('SELECT * FROM users WHERE id = ?, name = ?', [userId, name], function(err, results) {
  // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'
로그인 후 복사

connection.escape() 方法对传入参数进行编码。

如:

var post = {userId: 1, name: 'test'};
var query = connection.query('SELECT * FROM users WHERE ?', post, function(err, results) {
  // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'
로그인 후 복사

上面程序还可以改写成如下:

mysql.escapeId(identifier)
connection.escapeId(identifier)
pool.escapeId(identifier)
로그인 후 복사

方法三: 使用escapeId()编码SQL查询标识符:

如果你不信任用户传入的SQL标识符(数据库、表、字符名),可以使用escapeId()方法进行编码。最常用于排序等。

escapeId()有如下三个功能相似的方法:

var sorter = 'date';
var sql  = 'SELECT * FROM posts ORDER BY ' + connection.escapeId(sorter);
connection.query(sql, function(err, results) {
 // ...
});
로그인 후 복사

例如:

var userId = 1;
var sql = "SELECT * FROM ?? WHERE ?? = ?";
var inserts = ['users', 'id', userId];
sql = mysql.format(sql, inserts); // SELECT * FROM users WHERE id = 1
로그인 후 복사

方法四: 使用mysql.format()转义参数:

准备查询,该函数会选择合适的转义方法转义参数    mysql.format()

위 프로그램은 다음과 같이 다시 작성할 수도 있습니다.

rrreee

방법 3: escapeId()를 사용하여 SQL 쿼리 식별자를 인코딩합니다.

만약 사용자를 신뢰하지 않습니다. 들어오는 SQL 식별자(데이터베이스, 테이블, 캐릭터 이름)는 escapeId() 메서드를 사용하여 인코딩될 수 있습니다. 정렬 등에 가장 일반적으로 사용됩니다.

escapeId()에는 비슷한 기능을 가진 다음 세 가지 메서드가 있습니다.

rrreee

예:
rrreee

방법 4: mysql.format()을 사용하여 escape 매개변수:

🎜🎜 쿼리를 준비합니다. 이 함수는 적절한 이스케이프 방법을 선택합니다. 이스케이프 매개변수 mysql.format()은 쿼리 문을 준비하는 데 사용됩니다. 이스케이프 메소드. 🎜🎜예: 🎜🎜🎜rrreee🎜🎜🎜위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 주목하세요! 🎜🎜관련 권장 사항: 🎜🎜🎜node.js의 fs.stat과 fs.fstat의 차이점에 대해 🎜🎜🎜🎜 NodeJs 양식 데이터 형식으로 파일을 전송하는 방법 🎜🎜🎜🎜🎜Nodejs 서버 측 문자 인코딩 및 디코딩 및 왜곡된 문자 처리🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 node-mysql에서 SQL 주입을 방지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

nodejs는 백엔드 프레임워크인가요? nodejs는 백엔드 프레임워크인가요? Apr 21, 2024 am 05:09 AM

Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? Apr 21, 2024 am 05:18 AM

Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

nodejs는 백엔드 개발 언어인가요? nodejs는 백엔드 개발 언어인가요? Apr 21, 2024 am 05:09 AM

예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.

nodejs의 전역 변수는 무엇입니까 nodejs의 전역 변수는 무엇입니까 Apr 21, 2024 am 04:54 AM

Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

nodejs와 java 사이에 큰 차이가 있나요? nodejs와 java 사이에 큰 차이가 있나요? Apr 21, 2024 am 06:12 AM

Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

nodejs와 java 중 어느 것을 선택해야 합니까? nodejs와 java 중 어느 것을 선택해야 합니까? Apr 21, 2024 am 04:40 AM

Node.js와 Java는 각각 웹 개발에 장단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. Node.js는 실시간 애플리케이션, 신속한 개발 및 마이크로서비스 아키텍처에 탁월한 반면, Java는 엔터프라이즈급 지원, 성능 및 보안에 탁월합니다.

nodejs 프로젝트를 서버에 배포하는 방법 nodejs 프로젝트를 서버에 배포하는 방법 Apr 21, 2024 am 04:40 AM

Node.js 프로젝트의 서버 배포 단계: 배포 환경 준비: 서버 액세스 권한 획득, Node.js 설치, Git 저장소 설정. 애플리케이션 빌드: npm run build를 사용하여 배포 가능한 코드와 종속성을 생성합니다. Git 또는 파일 전송 프로토콜을 통해 서버에 코드를 업로드합니다. 종속성 설치: SSH를 서버에 연결하고 npm install을 사용하여 애플리케이션 종속성을 설치합니다. 애플리케이션 시작: node index.js와 같은 명령을 사용하여 애플리케이션을 시작하거나 pm2와 같은 프로세스 관리자를 사용합니다. 역방향 프록시 구성(선택 사항): Nginx 또는 Apache와 같은 역방향 프록시를 사용하여 트래픽을 애플리케이션으로 라우팅합니다.

nodejs를 mysql 데이터베이스에 연결하는 방법 nodejs를 mysql 데이터베이스에 연결하는 방법 Apr 21, 2024 am 06:13 AM

MySQL 데이터베이스에 연결하려면 다음 단계를 따라야 합니다. mysql2 드라이버를 설치합니다. mysql2.createConnection()을 사용하여 호스트 주소, 포트, 사용자 이름, 비밀번호 및 데이터베이스 이름이 포함된 연결 개체를 만듭니다. 쿼리를 수행하려면 Connection.query()를 사용하세요. 마지막으로 Connection.end()를 사용하여 연결을 종료합니다.

See all articles