SQL 인젝션 취약점은 악의적으로 입력된 SQL 명령을 웹 양식 제출에 삽입하거나 도메인 이름 또는 페이지 요청에 대한 쿼리 문자열을 입력하여 궁극적으로 서버를 속여 악성 SQL 명령을 실행하도록 하는 것을 말합니다.
SQL 인젝션 취약점
이름 그대로 SQL 삽입 취약점을 통해 공격자는 SQL 문에 악의적인 입력을 삽입할 수 있습니다. 이 문제를 완전히 이해하려면 먼저 서버 측 스크립팅 언어가 SQL 쿼리를 처리하는 방법을 이해해야 합니다.
예를 들어, 웹 애플리케이션의 함수가 다음 SQL 문을 사용하여 문자열을 생성한다고 가정합니다.
$statement = "SELECT * FROM users WHERE username = 'bob' AND password = 'mysecretpw'";
이 SQL 문은 문자열을 연결된 데이터베이스로 보내는 함수에 전달되며, 여기서 구문 분석, 실행 및 결과를 반환합니다.
이 문에 몇 가지 새로운 특수 문자가 포함되어 있다는 것을 눈치채셨을 것입니다.
* : 선택한 데이터베이스 행의 모든 열을 반환하도록 SQL 데이터베이스에 대한 명령입니다.
= : SQL 데이터베이스가 다음과 같은 열만 반환합니다. 검색과 관련됨 문자열 일치 값에 대한 지시어
' : SQL 데이터베이스에 시작 또는 끝 문자열을 검색할 위치를 알려주는 데 사용됩니다.
이제 웹사이트 사용자가 예를 들어 로그인 양식의 "$user" 및 "$password" 값:
$statement = "SELECT * FROM users WHERE username = '$user' AND password= '$password'";
입력이 애플리케이션에 의해 삭제되지 않으면 공격자는 특수 SQL 구문을 명령문에 쉽게 삽입할 수 있습니다.
$statement = "SELECT * FROM users WHERE username = 'admin'; -- ' AND password= 'anything'";= 'anything'";
admin'; - : 공격자의 입력입니다. 여기에 두 개의 새로운 특수 문자가 포함됩니다.
; : 현재 문이 종료되었음을 SQL 파서에 나타내는 데 사용됩니다(대부분의 경우 필요하지 않음)
- : 사용됨 줄의 나머지 부분을 SQL 파서에 표시합니다.
이 SQL 주입은 비밀번호 유효성 검사를 효과적으로 제거하고 기존 사용자(이 경우 "admin")에 대한 데이터 세트를 반환합니다. 공격자는 이제 암호를 지정하지 않고 관리자 계정을 사용하여 로그인할 수 있습니다. 비밀번호.
위 내용은 SQL 주입 취약점이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!