무엇 SQL 주입 공격 / 취약점?
이 FAQ는 대답 k4thryn에 의해 작성되었습니다 :
한 SQL 주입 취약점이 저조한 - 작성된 프로그램을 사용자가 사용하는 경우가 발생할 수있습니다 - 최초의 입력을 검증하지 않고 데이터베이스 쿼리에서 데이터를 제공했습니다. 동적 콘텐츠와 함께 웹페이지 시간이 가장 - 종종 발견된다. 거기에 다른 어플 리케이션을위한 완전한 - 공개 웹사이트에서이 주제에 대한 몇 가지 훌륭한 튜토리얼과 설명이 기사뿐만 아니라, 많은 취약점이 게시물이없습니다.
SQL 주입의 간단한 예를 들어 당신은 사용자 이름과 암호를 제공하는 기본적인 HTML 양식 로그입니다 :
method="post"를 <form action="process_login.php"> <input type="text" name="username"> <input type="password" name="password"> </ 양식>
HTML의 스니펫에서는 감안할 때, 한 사람은 일자리를 "process_login.php"에 그것을 빌드하고 데이터베이스 쿼리를 실행하는 것이 스크립트를위한 가장 쉬운 (최악의) 방법을 추론할 수있다는이 같은 외모 :
"id를 선택하세요 에서 로그인 어디 = 사용자 '$ 사용자' 이름과 비밀 번호 = '$ 암호' ";
이와 같은 상황의 경우에는 변수가 "$ username"을하고 "$ 비밀 번호"를 직접적으로 사용자의 입력에서, 로그인 스크립트를 쉽게 유효한 암호는 SQL 문장의 문법을 가지고 노는 의해 제공되었습니다 말려들 수있다는 믿음입니다. 다음 문자열을 가정해 비밀 번호로 제공했다 :
'또는'= '
그리고 우리는 사용자 이름으로 "밥"고했다. 일단 변수 쿼리 보정 위는 이런 모양이 될 수있습니다 :
"id를 선택하세요 에서 로그인 여기서 username = '밥' 이름과 비밀 번호 = '' 또는 '' = '' ";
이 쿼리는 행을 반환합니다 때문에 최종 조항 :
... 또는 '' = ''
항상 true로 평가합니다 (빈 문자열이 항상 빈 문자열로)와 동일합니다.
SQL 주입 공격을 방지
가장 일반적인 방법은 SQL 주입 vunerability을 막기 위해 이런 종류의 단일 - 따옴표와 같은 위험 인물에 대한 사용자의 입력을 확인하는, 그리고 정확히 어떤 사용자는 기대 - 데이터를 제공하기 전에 데이터베이스를 말할 준비가 재무 제표를 사용하여 그것에 전달됩니다.
|






