문제

CGI 프로그램으로 실행되는 PHP 스크립트와 HTTP Authenticate 헤더를 먹고 뱉어냅니다.그래서 일종의 FORM 기반 인증을 구현하고 싶습니다.추가 제약 사항으로 데이터베이스가 없으므로 세션 데이터를 저장할 수 없습니다.

나는 마스터 사용자 이름과 비밀번호를 갖는 데 매우 개방적입니다.이러한 자격 증명을 모르는 침입자로부터 애플리케이션을 보호하면 됩니다.

그렇다면 이것을 어떻게 구현하시겠습니까?

쿠키?

양식을 제시할 수 있고 유효성이 검사되면 비밀 코드와 함께 IP 주소의 해시인 쿠키를 다시 보낼 수 있습니다.그러면 페이지가 올바르게 해독되지 않는 한 페이지가 렌더링되지 않도록 할 수 있습니다.하지만 PHP에서 이를 구현하는 방법을 모르겠습니다.

도움이 되었습니까?

해결책

이를 수행할 수 있는 몇 가지 방법이 있습니다.

  1. htaccess -- 웹서버가 문제의 페이지 보안을 처리하도록 하십시오(정확하게는 CGI 형식 기반은 아니지만).
  2. 쿠키와 일종의 해싱 알고리즘(md5이면 충분함)을 사용하여 파일의 각 줄이 사용자 이름:passwordhash인 플랫 파일에 비밀번호를 저장합니다.반드시 소금 추가 보안과 레인보우 테이블을 위한 해시.(이 방법은 좀 순진한데...BE 매우 이 경로로 갈 경우 보안에 주의하세요)
  3. 다음과 같은 것을 사용하십시오 SQLite 인증을 처리하기 위한 데이터베이스입니다.Sqlite는 큰 DB 백엔드를 원하지 않더라도 요구 사항을 충족할 수 있을 만큼 작고 간단합니다.

이론적으로는 데이터베이스가 없더라도 세션 데이터를 플랫 파일에 저장할 수도 있습니다.

다른 팁

현재 인증을 사용하고 있다면 이미 htpasswd 파일.해당 파일을 계속 사용하고 싶지만 Authenticate 헤더를 통하지 않고 FORM 기반 인증을 사용하도록 전환하는 경우 PHP 스크립트를 사용하여 동일한 htpasswd 파일을 사용하고 세션을 사용하여 인증 상태를 유지할 수 있습니다.

php htpasswd에 대한 빠른 Google 검색은 다음과 같습니다. 이 페이지 htpasswd에 대해 자격 증명을 확인하는 PHP 함수를 사용합니다.다음과 같은 일부 코드를 사용하여 이를 통합할 수 있습니다(세션이 자동 시작으로 설정되어 있다고 가정).

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

정말 양식이 필요한가요?무엇을 하든 사용자 이름과 비밀번호가 알려지면 제한됩니다.그들이 그것을 안다면, 그들은 그것을 가능하게 해주는 마법의 쿠키를 얻게 될 것입니다.상대방이 비밀을 모르는 경우 페이지를 보지 못하게 하려는 경우 기본 인증을 사용하면 설정이 쉽고 사용자 측에서 많은 작업이 필요하지 않습니다.

웹 서버가 액세스 제어를 처리하는 경우 Authorization 헤더를 꼭 확인해야 합니까?

또한 공개가 아닌 알려진 사람들 목록에 애플리케이션을 제공하는 경우 수신 IP 주소, 클라이언트 인증서 및 기타 여러 요소와 같은 다른 요소에 대한 웹 서버 기반 액세스를 제공할 수 있습니다. 프로그래밍보다는 구성의 문제입니다.보안 제약 조건을 설명해 주시면 더 나은 솔루션을 제공할 수도 있습니다.

행운을 빌어요, :)

...솔트에 대해 해시 솔트에 사용자 이름을 추가하면 솔트를 알고 비밀번호 파일에 액세스할 수 있는 사람이 레인보우 테이블과 사용자 비밀번호 크랙 번호를 작성하는 것을 방지할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top