반응형
왜 보안이 필요한가?
- 외부로부터 들어오는 정보가 오염됐을 경우를 대비해야함 (오염될 수 있는 정보 : 접근한 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], ...
- ?값을 배열로 전달하면서 오염된 정보를 처리하가는 기능들이 따라 붙게됨
반응형
'Dev > Nodejs-mysql' 카테고리의 다른 글
[Nodejs-mysql] 테이블값 삭제하기 (0) | 2020.08.07 |
---|---|
[Nodejs-mysql] 테이블값 업데이트 하기 (0) | 2020.08.07 |
[Nodejs-mysql] 폼 만들고 모듈 분리하기 (0) | 2020.08.07 |
[Nodejs-mysql] 테이블 만들고 모듈 분리하기 (0) | 2020.08.07 |
[Nodejs-mysql] DB 관련 코드 모듈로 분리하기 (0) | 2020.08.07 |