2011-03-06 3 views
0

작고 매우 구체적인 응용 프로그램 별 CMS를 만들고 있습니다. 재정적 인 일은 없으며 콘텐츠는 민감하지 않습니다. (대부분 예술 작품 간의 관계를 관리하는 것이기 때문에) 보안은 최우선 순위는 아니지만 여전히 사용자 그룹을 관리하는 로그인 시스템을 사용하고 있습니다. 각 설치.사이트 전체 테스트를위한 모범 사례 및 로그인 상태에 대한 반응

입력 페이지에는 로그인 양식이 있습니다. 성공하면 세션 변수가 사용자 테이블의 PK로 설정되고 임의의보기 페이지로 리디렉션됩니다. 이 변수는 해당 사용자가 변경 한 내용을 추적하는데도 사용됩니다.

저는 세션 변수가 설정되어 있는지 확인하는 작은 스크립트를 모든 페이지에 auto_prepending하고 있습니다. 그렇지 않은 경우 사용자는 로그인 페이지로 다시 반송됩니다. 이것은 작동하지만 서투른 것 같다 - 내가 '면제'로그인 페이지로 필요 특히 때문에, 그래서 기본적으로 이것이다 못생긴 작은 해킹, 사용 : 실제 스크립트

if(!isset($_SESSION['user']) && strpos($_SERVER['PHP_SELF'], '/login.php') !== 0) { 
    header('Location: /login.php'); 
} 

가 단순화 조금, 기본적으로 어떤 일이 벌어지고 있는지 보여줍니다.

답변

1

그것은 것 같다 로그인 한 상태와 그 상태가 설정되지 않은 경우 리디렉션 ...

tyia을 테스트 - 이런 일에 설립 된 모범 사례가 있다면

궁금하네요 당신은 표준 접근법을 사용하고 있습니다. 하지만 PHP 페이지마다이 스크립트를 포함하는 대신 모든 요청이 보안을 담당하는 하나의 index.php 파일을 통과하게해야합니다. 그렇게하면, 단일 실패 지점 (index.php 파일)이 확실합니다. 또한

 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_URI} .*\.php$ 
    RewriteRule ^(.*)$ /index.php?script=$1 
</IfModule> 

당신이를 요구하는 모든 페이지의 상단에 그것을 함수를 정의하고 포함 할 수있다 : 당신이 아파치를 실행하는 경우

이 진행을 얻으려면, 당신은 htaccess로 파일이 필요합니다 로그인 :

 
// in security.php 
function require_login($redirect_to='/login.php) { 
    if (empty($_SESSION['user'])) { 
     header('Location: ' . $redirect_to); 
     exit(); 
    } 
} 

// and in your .php files except for login.php 
include_once 'security.php'; 
require_login(); 

당신은 또한뿐만 아니라 '사용자가'세션에 설정되어 있는지 테스트 할 수 있지만 일부 식별자 (예 : ID를.)가 포함되어있다.

+0

내가 지금하고있는 일이 실제로 효과가있다. (내가 준 예제는 무너졌고, auto_prepend는 다른 것들에 사용되어서 나는 단지 피기 백킹을하고있다.) 그리고 당신은 이것이 ' 본질적으로 질문이었습니다 - 빠른 답장을 보내 주셔서 감사합니다. – momo