Node.js 데이터베이스 조작 조회 MySQL 데이터베이스(2)

머리말
우 리 는 지난 글 인 에서 Nodejs 가 MySQL 데이터 베 이 스 를 연결 하 는 몇 가지 방법 을 배 웠 고 데이터 베 이 스 를 연결 한 후에 데이터 베 이 스 를 조회 해 야 한다.이 글 은 MySQL 데이터 베 이 스 를 조회 하 는 방법 을 소개 합 니 다.다음은 할 말 이 많 지 않 으 니 상세 한 소 개 를 좀 봅 시다.
조회 방식
지난 글 에서 우 리 는 데이터 베 이 스 를 조회 하 는 가장 기본 적 인 방법 을 사용 했다.connection.query(sqlString, callback)첫 번 째 매개 변 수 는 SQL 문장 으로 임의의 데이터베이스 문장 일 수 있 으 며,두 번 째 매개 변 수 는 리 셋 함수 로 조회 결 과 는 리 셋 매개 변 수 를 통 해 되 돌 아 옵 니 다.

connection.query(
 'select * from book where author = "xyf" and country = "china"',
 function(err, result) {
 console.log(result);
 }
);
이것 은 가장 간단 한 조회 방식 이지 만 두 가지 문제 가 존재 합 니 다.하 나 는 문자열 을 맞 추 는 것 이 비교적 번 거 롭 습 니 다.다른 하 나 는 sql 에 의 해 공격 되 기 쉬 우 므 로 두 번 째 조회 방식 이 있 습 니 다.
자리 표시 자 주입 조회
두 번 째 조회 방식 은 자리 차지 문자 형식connection.query(sqlString, values, callback)을 사용 하여 더러 운 문자열 의 조합 을 할 필요 가 없다.

connection.query(
 'select * from book where author = ? and country = ?',
 ['xyf', 'china'], 
 function(err, result) {
 console.log(result);
 }
);
대상 조회 방식 사용
세 번 째 조회 방식 은 검색 어 와 조회 수 치 를 하나의 대상 으로 조합 하여 조회 합 니 다.그것 의 형식 은 이렇다.connection.query(object, callback)

connection.query(
 {
 sql: 'select * from book where author = ? and country = ?',
 values: ['xyf', 'china'], //        
 timeout: 40000,
 },
 function(err, result) {
 console.log(result);
 }
);
조합 조회 방식
두 번 째 와 세 번 째 방식 을 결합 하여 사용 할 수 있 습 니 다.조회 값 은 query 방법의 매개 변수 로 서 대상 중의 한 속성 이 아 닙 니 다.

connection.query(
 {
 sql: 'select * from book where author = ? and country = ?',
 timeout: 40000,
 // ['corner', 'us'] //       ,        
 },
 ['xyf', 'china'], //   query       
 function(err, result) {
 console.log(result);
 }
);
주의해 야 할 것 은 만약 에 우리 가 조회 값 을 대상 의 속성 으로 하고 query 함수 의 매개 변수 로 한다 면 이때 함수 중의 매개 변 수 는 대상 의 속성 을 덮어 씁 니 다.즉,이때 매개 변수의 값 만 유효 합 니 다.
분석 조회 값
데이터 베 이 스 를 조회 할 때 중요 한 원칙 은 사용자 의 입력 을 영원히 믿 지 말 라 는 것 이다.왜 사용자 의 입력 을 믿 을 수 없 습 니까?먼저 SQL 주입 공격 에 대해 알 아 보 겠 습 니 다.
SQL 주입 공격
SQL 주입 공격 이란 SQL 명령 을 웹 폼 에 삽입 하여 도 메 인 이나 페이지 에서 요청 한 조회 문자열 을 제출 하거나 입력 함으로써 서버 를 속 이 고 악의 적 인 SQL 명령 을 수행 하 는 것 입 니 다.필 자 는 데이터베이스 분야 의 업무 도 아니 고 데이터베이스 분야 의 벽돌집 도 아니 기 때문에 간단 한 DEMO 를 통 해 SQL 주입 공격 을 보 여줄 수 밖 에 없다.
만약 에 저희 가 맞 춘 SQL 문 구 는 이 렇 습 니 다.

var username = 'xyf';
var sql = 'select * from book where author = "'+username+'"';
여기 서 우 리 는 사용자 가 입력 한 username 이 Jack 이나 Lili 와 같은 것 이 기 대 됩 니 다.그러나 사용자 가 내 가 한사코 그렇지 않다 고 하면 악성 코드 를 입력 하 겠 습 니 다.

var username = '"1 or 1=1';
var sql = 'select * from book where author = "'+username+'"';
마지막 으로 우리 가 연결 한 검색 어 는 다음 과 같다.

select * from book where author = "" or 1=1
만약 에 독자 가 SQL 문장 에 대해 기본 적 인 이 해 를 가지 고 있다 면 이 검색 어 를 데이터베이스 에 넣 고 조회 하면 모든 사용자 의 정보 가 밝 혀 질 것 이다.그러나 이것 은 우리 가 보고 싶 은 결과 가 아니다.
SQL 주입 공격 피하 기
그렇다면 SQL 주입 공격 을 어떻게 피 할 수 있 을 까?my sql 은 두 가지 방법 을 제공 합 니 다.첫 번 째 방법 은 검색 할 때마다 사용자 가 입력 한 데 이 터 를 escape()함수 로 해석 하 는 것 입 니 다.예비 처리 문 과 유사 합 니 다.

var authorname = 'user input';
connection.escape(authorname);
//     mysql.escape(authorname);
connection.query(
 'select * from book where author = "'+authorname+'"',
 function(err, result) {
 console.log(result);
 }
);
두 번 째 방법 은 조회 할 때 위 에서 말 한 자리 표시 자 를 통 해 조회 방식 을 주입 하여 조회 하 는 것 이다.그러나 그 내부 의 실현 도 위 에서 말 한 escape()방법 을 통 해 사용자 의 입력 을 분석 했다.두 번 째 방법 으로 간단 하고 빠 른 것 을 추천 합 니 다.
다 중 구문 조회
my sql 은 다 중 구문 조 회 를 지원 하지만 일부 안전 원인(공식 해석 은 값 이 올 바 르 게 해석 되 지 않 으 면 SQL 주입 공격)이 기본적으로 금지 되 어 있 기 때 문 입 니 다.그럼 이'판도 라 의 상자'를 열 어 봅 시다.
데이터베이스 연결 을 만 들 때 먼저 이 기능 을 켜 라.

let connection = mysql.createConnection({
 //     
 multipleStatements: true,
});
그런 후에 우 리 는 여러 문장 으로 조회 할 수 있다.

connection.query(
 {
 sql: `select * from book where username = ?;
  select * from book where username = ?;`,
 },
 ['ace','xyf'],
 function(err, rows, fields) {
 if (err) throw err;
 console.log('The solution is: ', rows);
 }
);
검색 결과
검색 어 를 통 해 되 돌아 온 결 과 는 배열 의 형식 으로 되 돌아 갑 니 다.단일 구문 조회 라면 배열 은 순수한 대상 배열[obj 1,obj 2,...]입 니 다.배열 의 모든 대상 은 데이터 베이스 의 모든 줄 의 데이터 이 고 대상 의 방식 으로 만 되 돌아 갑 니 다.데 이 터 를 조회 하지 못 하면 배열 의 길 이 는 0 이다.
그러나 다 구문(m 구문)방식 으로 조회 하면 되 돌아 오 는 것 도 하나의 배열 이지 만 배열 에 n 개의 배열 이 포함 되 어 있 습 니 다.n 의 수 치 는 검색 문장의 개수 m(즉 n=m)에 달 려 있 습 니 다.
총결산
공식 문서 가 비교적 자질구레 하기 때문에 잘 정리 되 지 않 았 으 니 문제 가 있 는 부분 은 지적 해 주시 기 바 랍 니 다.이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기