2014-01-14 7 views
0

SQL 주입 문제에 대한 내 웹 사이트를 테스트하고 이해할 수없는 몇 가지 문제가 있습니다.SQL 주입 테스트 오류

기본적으로 나는 사용자 블로깅 시스템을 구축 중입니다.

"오류 문자열을 발견 : '무결성 제약 조건 위반'"

"서버 상태 코드 : 302 임시로 이동"-

나는 내가받은 약간의 오류가 여기에 나에게 파이어 폭스 플러그인을 주입하고 SQL을 사용하고 있습니다 나는 그것이 특정 양식에 대해 오류가 발생했을 때 사용자를 리디렉션하기 때문에라고 생각합니다.

전반적으로 나는 실패하지 않았으며 42,000 개의 테스트를 통과했습니다. 그러나 일부 데이터베이스 항목이 영향을 받고 있습니다.

내가 데이터베이스에서 '게시물'에서 반향하고 말할 수 있습니다 :

그때 모든 데이터 및 데이터를 편집하는 데 사용되는 숨겨진 양식이있다. 사용자가 로그인하면 클릭 할 수있는 버튼이 표시되고이 양식이 표시됩니다.

사용자가 로그인하지 않아도 SQL 삽입 기능으로 게시물을 수정할 수 있습니다.

게시물을 업데이트하는 처리 페이지에서 POST를 확인하고 데이터베이스의 게시물 사용자 이름을 다시 확인하고 로그인 한 사용자 (로그인하지 않은 경우 비어 있음) 사용자의 세션 사용자 이름도 확인합니다. 그러나 여전히 변경이 가능합니다.

어떻게 될 수 있습니까? 그리고 폼을 "display : none"정도로 표시하면 충분합니까?

+0

연결에 사용하고있는 것은 무엇입니까, mysqli? – Ryan

+0

@ryan 모든 양식 처리는 바인드 된 쿼리와 PDO를 사용하여 수행됩니다. – Lovelock

+0

@ 제로 엔 - 테스트에 대한 질문과 결과가 어떻게 도달했는지에 따라 약간 다릅니다. 주사 나 예방이 아닙니다. – jww

답변

0

데이터베이스에 데이터를 삽입하기 전에 사용자가 로그인했는지 (유효한 세션이 있는지) 확인해야합니다. 아래 예제 코드 : 사용자 이름/암호가 올바른지

로그인 페이지에서

,이 실행 :

PHP가 현재의 세션 쿠키가 유효하고 올바른에 속한다는 것을 "기억"하게됩니다
$_SESSION["logged_in"] = true; 

사용자.

if (isset($_SESSION["logged_in"]) && $_SESSION["logged_in"]) { 
    // all good, user is logged in, you can change database contents 
    mysqli_query("UPDATE ..."); // example query 
} else { 
    // something is wrong, the form is submitted without a valid session 
    // so it's probably a malicious user, anyway don't change database contents 
    echo "Access denied, please log in."; // display error message 
    header("Location : /login.php"); // or redirect them to the login page 
}; 

을 그리고를 형성 표시됩니다 :

당신이 데이터베이스 내용을 변경해야 할 때마다

, 당신은 확인할 수 있습니다 충분 "표시 없음"?

아니오; 악의적 인 사용자가 숨겨진 경우에도 양식을 제출할 수 있습니다 (개발자 도구를 사용하여 표시하거나 양식을 제출하는 스크립트를 작성하여 페이지 소스를보고 실제로 취약성 검사기 확장이 수행하는 작업 임). 양식이 숨겨져 있어도 제출하십시오.

+0

데이터를 삽입하기 전에 사용자 검사를 개선하는 것이 좋지 않습니다. 또한 양식을 어떻게 둘러 볼 수 있습니까? 내가 추측하는 양식을 만들려면 js를 사용할 수 있습니다. – Lovelock

+0

DB에 데이터를 삽입하기 전에 사용자의 세션을 확인하고 자바 스크립트를 "보호"로 사용하는 것은 좋은 생각입니다. 공격자가 쉽게 우회 할 수 있습니다. –

+0

죄송합니다. 양식을 표시해야합니다. js를 사용하여 양식을 만들고 숨겨진 양식으로 표시하는 대신 – Lovelock