본문 바로가기

Database/mysql

sql injection

/*******************************
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