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

3567 단어 node-mysqlsql주입
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()방법 인 코딩 규칙 은 다음 과 같 습 니 다.
     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
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기