SQL 인젝션
SQL 인젝션은 데이터베이스에 연결된 웹사이트와 웹 애플리케이션을 대상으로 하는 사이버 공격의 한 형태입니다. 이러한 공격은 제대로 구성되지 않은 웹사이트 및 데이터베이스 서버 소프트웨어를 악용해 서버가 원래는 실행하지 않았을 SQL 문을 구문 분석하도록 속입니다. 이러한 공격으로 민감한 개인 정보와 금융 정보가 노출되거나, 공격자가 데이터베이스에 저장된 정보를 변경 또는 삭제할 수 있으며, 그 밖의 무단 액세스가 가능해질 수도 있습니다.
웹사이트가 텍스트 양식에서 사용자 입력을 받아 이를 SQL 쿼리의 일부로 포함하면 SQL 인젝션에 취약합니다. 공격자는 예상되는 정보예: (사용자 이름)를 양식 필드에 입력하는 대신 SQL 쿼리를 수정하는 텍스트 문자열을 입력합니다. 예를 들어 가상의 쿼리는 SELECT UserID, Name, Password FROM Users WHERE UserID = 로 시작하고, 이어서 사용자 ID 양식 필드의 입력 내용이 추가될 수 있습니다. 사용자가 자신의 사용자 ID를 입력하면 쿼리가 예상대로 작동해 해당 사용자의 정보를 불러옵니다.
하지만 서버가 입력 텍스트를 제한 없이 쿼리에 삽입하면 공격자는 이를 이용해 SQL 쿼리 문 자체를 수정할 수 있습니다. 누군가 사용자 ID 대신 317 OR 1=1이라는 텍스트를 입력하면 쿼리는 SELECT UserID, Name, Password FROM Users WHERE UserID = 317 OR 1=1;이 됩니다. OR 1=1은 항상 참으로 평가되므로 사용자 ID 조건을 무시하게 되고, 쿼리는 Users 테이블의 모든 항목에 대한 사용자 ID, 이름, 비밀번호를 반환합니다. 다른 유형의 코드 인젝션을 사용하면 공격자가 사이트 관리자로 로그인하거나, 데이터베이스에서 레코드 또는 테이블을 삭제하거나, (일부 극단적인 경우) 셸 스크립트와 기타 코드를 삽입하고 실행할 수 있습니다.
웹사이트 관리자는 서버 소프트웨어를 최신 상태로 유지해 SQL 인젝션 공격을 방지할 수 있습니다. 또한 입력 텍스트를 제한하거나 특정 문자를 필터링해 데이터베이스 입력을 "정제"하는 것도 중요합니다. 웹사이트 관리자는 SQL 쿼리를 매개 변수화할 수도 있습니다. 즉, 입력 내용을 쿼리에 직접 삽입하는 대신 사용자 입력을 가리키는 자리 표시자를 쿼리에 사용하는 것입니다.
지식 테스트하기