본문 바로가기
WEB/Nodejs-mysql

[Nodejs-mysql] 보안의 중요성

by Ellen571 2020. 8. 7.

[생활코딩] 보안 - SQL Injection

 

 

왜 보안이 필요한가?

- 외부로부터 들어오는 정보가 오염됐을 경우를 대비해야함 (오염될 수 있는 정보 : 접근한 url, 등록된 글, 파일 업로드)

 

외부로부터 SQL 쿼리문이 등록되는 경우

- 데이터베이스에서 ;를 입력하는 이유는 한 번에 여러개의 쿼리문을 실행하기 위함

- SELECT * FROM topic; DROP TABLE topic; 입력하면 두개의 쿼리문 실행

[Ex]

- 사용자가 localcast:3000/?id=1 접속시

- SELECT*FROM topic JOIN LEFT author ON topic.author_id=author_id WHERE topic.id='1' 이 실행됨

- 사용자가 localcast:3000/?id=1;DROP TABLE topic; 로 접속한다면

- SELECT*FROM topic JOIN LEFT author ON topic.author_id=author_id WHERE topic.id='1;DROP TABLE topic;'가 실행

- ;DROP TABLE topic;가 문자로 인식되면서 공격 실패

이유는?

db.query('SELECT*FROM topic LEFT JOIN author ON topic.author_id = author.id WHERE topic.id=?', [queryData.id], ...

- ?값을 배열로 전달하면서 오염된 정보를 처리하가는 기능들이 따라 붙게됨

반응형