SQL 인젝션이란?

웹 취약점의 가장 큰 클래스 중 하나는 "SQL 주입" 또는 SQLi로 알려져 있습니다. SQL이라고도 하는 구조적 쿼리 언어는 데이터베이스에 따라 다양한 언어 변형이 사용되지만 대부분의 데이터베이스와 상호 작용하는 데 사용되는 언어 플랫폼. 계정 정보와 같은 사용자 데이터를 저장하거나 이미지 호스팅 웹사이트와 같은 사용자 업로드 기능을 제공하는 모든 웹사이트는 데이터베이스를 사용하여 해당 데이터를 저장합니다.

팁: SQL은 일반적으로 "ess cue ell" 또는 "sequel"로 발음되며 첫 번째 옵션은 영국식 영어에서 더 일반적이고 두 번째 옵션은 미국식 영어에서 더 많이 사용됩니다. 두 발음 모두 일반적으로 데이터베이스에 대해 이야기하는 맥락에서 이해됩니다.

SQLi 란 무엇입니까?

SQLi는 웹 개발자가 서로 통신하는 코드를 설계하는 취약점입니다. 웹 서버와 데이터베이스는 사용자. 문제는 데이터베이스 문에서 빠져 나와 새 인수 또는 완전히 새로운 문을 추가할 수 있다는 것입니다. 변경된 또는 두 번째 데이터베이스 문은 잠재적으로 대규모 삭제 또는 데이터 유출을 포함한 다양한 작업을 수행할 수 있습니다.

익스플로잇은 일반적으로 모든 상황에서 기존 명령문이 사실이 되도록 하거나 모든 데이터 삭제 또는 표시와 같은 특정 작업을 수행하는 두 번째 일괄 처리 명령을 제공하는 것을 중심으로 이루어집니다. 예를 들어, 웹사이트에 로그인하기 위한 SQL 문은 제출된 사용자 이름과 암호가 데이터베이스의 항목과 일치하는지 확인할 수 있습니다. 액세스를 시도하기 위해 SQL 주입 익스플로잇은 "or 1=1"과 같은 "or true" 절을 추가하려고 할 수 있습니다. 이것은 "login with [this] username, if password is [this], or this statement is true" 줄을 따라 명령을 만들 것입니다.

SQLi를 방지하는 방법

SQLi는 웹사이트에서 데이터베이스가 침해된 후 온라인으로 유출되는 매우 일반적인 방법이었습니다. 보안 인식이 개발자 교육의 일부가 되도록 하기 위한 공동의 노력으로 인해 이러한 유형의 취약성은 대부분 해결되었으며 더 이상 거의 나타나지 않습니다.

SQLi를 방지하는 올바른 방법은 매개변수화된 쿼리라고도 하는 준비된 명령문을 사용하는 것입니다. 일반적으로 SQL 문은 선언되고 해당 선언 중에 사용자 입력이 연결됩니다. 준비된 명령문을 사용하여 데이터베이스 명령을 작성한 다음 별도의 함수가 명령을 실행하고 사용자 데이터를 삽입합니다. 이것은 사소한 차이처럼 보일 수 있지만 명령이 처리되는 방식을 완전히 변경합니다. 차이점은 의미 있는 SQL 명령이 실행되는 것을 방지하고 모든 사용자 입력을 문자열로 처리하여 SQL 주입이 발생하지 않도록 방지합니다.