/*******************************
SQL Injection -- (SQL 삽입 공격)
사용자가 입력할 수 있는 영역을 활용해서
개발자가 의도하지 않은 SQL문을 실행 하게 하는 공격 방법
*/
USE sqlDB;
show tables;
SELECT * FROM member_tbl;
-- id001
-- pw001
-- id001'; --
SELECT * FROM member_tbl WHERE id = 'id001'; -- ' AND pw = '';
-- ' OR '1' = '1
SELECT * FROM member_tbl WHERE id = 'id001' AND pw = '' OR '1' = '1';
일반적인 SQL 문 사용시 사용자가 id값을 id001';-- 이런식으로 입력하면
쿼리문 이 주석처리 되어 로그인이 가능해짐. 이렇게 쿼리문을 악용해서 데이터 탈취 가능.
preparedstate문을 사용하는 것 자체만으로도 이러한 공격을 막을 수 있음.
회원목록을 불러오는 것 처럼 시스템 내부에서 동작하는 쿼리문은 일반 쿼리문을 사용하는 것이
속도가 훨씬 빠르다.
하지만 나머지. 로그인, 회원정보 수정과 같이 외부의 값을 받아서 동작하는 경우
보안측면에서 preparedstate문을 사용하는것이 좋다.
PREPARE
mQuery
FROM "SELECT * FROM member_tbl WHERE id = ? AND pw = ?";
SET @id = 'id001'; -- ';
SET @pw = '' OR '1' = '1';
SELECT @id, @pw;
EXECUTE mQuery USING @id, @pw;
'Database > mysql' 카테고리의 다른 글
6.22 database 평가 answer (0) | 2023.07.03 |
---|---|
06.13 (0) | 2023.06.26 |
06.21 VIEW , INDEX, PROCEDURE, TRIGGER (0) | 2023.06.21 |
06.14 NATURAL JOIN, OUTER JOIN, PREPARE (0) | 2023.06.21 |
06.13 변수, MySQL 내장 함수, join (0) | 2023.06.21 |