node-mysql 에서 SQL 주입 을 방지 하 는 방법 요약
3567 단어 node-mysqlsql주입
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()방법 인 코딩 규칙 은 다음 과 같 습 니 다.Numbers 는 변환 하지 않 습 니 다.
Booleans 를 true/false 로 변환 하기;
Date 대상 을'YYYY-mm-dd HH:ii:ss'문자열 로 변환 합 니 다.
Buffers 는 X'0fa 5'와 같은 hex 문자열 로 변환 합 니 다.
Strings 안전 전의 진행;
Arrays 를 목록 으로 변환 합 니 다.예 를 들 어['a','b']는'a','b'로 변 환 됩 니 다.
다 차원 배열 을 그룹 목록 으로 변환 합 니 다.예 를 들 어['a','b'],['c','d']는'a','b')로 전환 합 니 다.('c','d');
Objects 는 key=value 키 쌍 의 형식 으로 변 환 됩 니 다.포 함 된 대상 을 문자열 로 변환 하기;
undefined/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'
위의 프로그램 은 다음 과 같이 바 꿀 수 있다.
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'
방법 3:escapeId()인 코딩 SQL 검색 식별 자 사용:사용자 가 들 어 오 는 SQL 식별 자(데이터베이스,표,문자 이름)를 신뢰 하지 않 는 다 면 escapeId()방법 으로 인 코딩 할 수 있 습 니 다.정렬 등에 가장 많이 쓰 인 다.
4.567914.다음 과 같은 세 가지 기능 이 비슷 한 방법 이 있다.
mysql.escapeId(identifier)
connection.escapeId(identifier)
pool.escapeId(identifier)
예 를 들 면:
var sorter = 'date';
var sql = 'SELECT * FROM posts ORDER BY ' + connection.escapeId(sorter);
connection.query(sql, function(err, results) {
// ...
});
방법 4:mysql.format()전의 매개 변 수 를 사용 합 니 다.조 회 를 준비 합 니 다.이 함 수 는 적당 한 전의 방법 을 선택 하여 전의 매개 변 수 를 선택 합 니 다
escapeId()
조회 문 구 를 준비 하 는 데 사 용 됩 니 다.이 함 수 는 자동 으로 적당 한 방법 전의 파 라미 터 를 선택 합 니 다.예 를 들 면:
var userId = 1;
var sql = "SELECT * FROM ?? WHERE ?? = ?";
var inserts = ['users', 'id', userId];
sql = mysql.format(sql, inserts); // SELECT * FROM users WHERE id = 1
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
복합 인덱스에 대한 YugabyteDB 스킵 스캔 일명 느슨한 인덱스 스캔인덱스 스캔이 두 번째 열의 범위에 액세스하기 위해 첫 번째 인덱스 열을 건너뛸 수 있는 방법을 테스트했습니다. 아이디어는 하나( i2 )에 모든 열이 인덱스 키로 있고 다른 하나( i1 )에 키의 일부가 아닌 마지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.