본문 바로가기
동굴 속 정보

SQL Injection 취약점이 발생하는 코드

by 도시형닌자 2024. 1. 17.

[ SQL Injection ]

안녕하세요, 기술 매니아 여러분! 오늘 우리는 코딩 사고로 인해 의도하지 않은 잠재적으로 유해한 접근을 만드는 SQL Injection 취약점의 세계를 살펴보겠습니다. SQL Injection은 개발자가 의도치 않게 악의적인 SQL 쿼리 조작에 어플리케이션을 노출시키면서 발생되는 사이버 보안 문제입니다. 이 블로그 게시물에서는 SQL 주입 공격으로 이어질 수 있는 취약한 코드의 몇 가지 예를 살펴보고 잠재적인 위험과 결과를 밝혀보겠습니다.

 

[ 취약점이 발생하는 코드]

1. 클래식 로그인

사용자가 자신의 계정에 액세스하기 위해 자격 증명을 입력하는 웹 사이트의 겉보기에 무해한 로그인 양식을 생각해 보십시오. 이제 이면의 코드가 다음과 같다고 가정해 보겠습니다. 

username = getRequestParameter('username')
password = getRequestParameter('password')

sql_query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "';"

 

이 시나리오에서는 코드가 사용자 입력을 SQL 쿼리에 직접 연결하기 때문에 취약점이 발생합니다. 악의적인 의도를 가진 사용자가 ' OR '1'='1' --과 같은 것을 입력하면 결과 SQL 쿼리는 다음과 같습니다.

SELECT * FROM users WHERE username = '' OR '1'='1' --' AND password = '';


이중 하이픈 '--'은 SQL 주석을 의미하므로 비밀번호 확인이 사실상 무의미해집니다. 공격자는 유효한 비밀번호 없이 액세스 권한을 얻습니다. 으악!

 


2. 동적 쿼리 취약점

이제 개발자가 사용자 입력을 기반으로 SQL 쿼리를 동적으로 작성하는 시나리오로 초점을 옮겨 보겠습니다. 다음 코드 조각을 고려해보세요.

let userInput = getRequestParameter('userInput');
let sql_query = "SELECT * FROM products WHERE product_name LIKE '%" + userInput + "%';";


이 순수해 보이는 코드 조각을 통해 사용자는 이름에 지정된 문자열이 포함된 제품을 검색할 수 있습니다. 그러나 교활한 사용자가 ' OR '1'='1' --과 같은 것을 입력하면 결과 쿼리는 다음과 같습니다.

 

SELECT * FROM products WHERE product_name LIKE '%' OR '1'='1' --%';


여기서 공격은 의도된 검색 기능을 우회하고 모든 제품을 검색합니다. 적절한 유효성 검사 없이 동적 쿼리를 작성하는 것은 원하지 않는 손님을 위해 현관문을 활짝 열어 두는 것과 같습니다.

 


3. 숫자 필드의 입력 유효성 검사 부족

숫자 필드와 관련된 시나리오를 잊지 마십시오. 사용자가 금액을 기준으로 거래를 검색할 수 있는 웹 애플리케이션을 상상해 보세요. 코드는 다음과 같습니다.

$amount = getRequestParameter('amount');
$sql_query = "SELECT * FROM transactions WHERE transaction_amount = " . $amount . ";";


무해한 것 같죠? 결과 쿼리는 다음과 같습니다.

SELECT * FROM transactions WHERE transaction_amount = 1 OR 1=1; --;


'1=1' 조건은 항상 true이며 공격자는 모든 트랜잭션에 대한 액세스 권한을 얻습니다. 입력 유효성 검사가 부족하면 간단한 검색이 잠재적인 보안 재앙으로 변합니다.

 

[ 취약점에 대한 마음가짐 ]

끊임없이 진화하는 웹 개발 환경에서는 SQL 삽입과 같은 취약점을 이해하고 완화하는 것이 중요합니다. 코드의 함정을 인식함으로써 우리는 보다 안전한 애플리케이션을 작성할 수 있는 힘을 얻습니다. 개발자로서 우리의 임무는 우리가 만드는 디지털 영역을 강화하여 무단 액세스에 대한 문을 단단히 닫는 것입니다. 경계심을 갖고 책임감 있게 코딩하며 더 안전한 사이버 공간을 함께 만들어 가세요!