2010-01-08 6 views
0

간단히 말해서, 저는 사내 보고서 엔진을 개발하고 있습니다. 그것은 전적으로 웹 기반이며 (PHP와 다양한 AJAX 기술 활용), 우리의 프로덕션 소프트웨어에 의해 MySQL 데이터베이스에 저장된 데이터를 해석합니다. 그것은 우분투 8.04 서버에서 실행되며 모든 직원은 해당 컴퓨터에서 리눅스 사용자 계정을 가지고 있습니다. 필자는 사용자가 자신의 리눅스 사용자 계정으로 로그인하도록 강제하는 pam_auth를 사용하여 로그인 시스템을 설정하고 특정 사용자가 특정 그룹에 속해 특정 보고서에 액세스 할 수 있는지 여부를 결정합니다.PHP pam_auth 및 쿠키

그 부분은 훌륭하게 작동합니다. 제 문제는 쿠키를 사용하여 "remember me"기능을 추가하는 것입니다. 30 일간의 쿠키 만 있으면 세션이 만료되고 로그인 할 때마다 세션이 만료 될 때까지 기다리는 것이 좋습니다. 나는 코드의 "나 기억해"부분을 썼다. 쿠키는 잘 저장되었다. 나는 그들의 사용자 이름과 암호의 md5 해쉬만을 저장하고있다. 여기서 문제는 다시 인증 할 때입니다. 일반적으로 나는 단순히 저장된 사용자 이름을 데이터베이스에서 해당 사용자의 암호 해시와 비교하여이 작업을 수행합니다. 어떤 일을 복잡하게 만드는 것은 내가 사용자 이름과 암호 해시에 직접 액세스 할 수 없다는 것입니다. 그것들은 모두/etc/passwd와/etc/shadow에 저장되고 로그인은 PAM 모듈에 의해 처리됩니다. pam_auth는 일반 텍스트 사용자 이름과 일반 텍스트 암호를 필요로합니다.

나의 유일한 대안은 일반 텍스트로 암호를 저장하거나 되돌릴 수있는 암호화로 저장하는 것 인 것처럼 보이지만 특히 그 중 하나가 마음에 들지 않습니다.

더 좋은 해결책이 있습니까?

답변

0

사용할 수있는 또 다른 옵션은 PHP의 세션 관리 기능입니다. 그런 다음 사용자 컴퓨터에 설정해야하는 유일한 쿠키는 PHP가 자동으로 처리 할 세션 ID입니다.

'session.cookie_lifetime'과 'session.gc_maxlifetime'의 두 가지 ini 설정을 변경하여 PHP 세션 길이를 30 일 이상으로 설정할 수 있습니다. 그런 다음 사용자가 로그인하면 session_start()를 호출 한 후 $ _SESSION 수퍼 글로벌 배열에 로그인했을 때 사용자 이름을 저장할 수 있습니다. 사용자가 반환하면 $ _SESSION 배열의 값을 확인하여 로그인했는지 여부와 30 일 미만인지 여부를 확인할 수 있습니다.

다른 이유로이 시점에서 여전히 PAM 인증이 필요한 경우 세션 변수에 암호를 일반 텍스트 또는 가역적으로 저장해야합니다. 이상적이지는 않지만 사용자의 브라우저에있는 쿠키보다 안전합니다. 자세한 내용은 PHP Session - Manual을 참조하십시오.

+0

세션 수명을 2592000 (30 일)으로 설정하여 발생할 수있는 문제가 있습니까? – DWilliams

+0

나는 어떤 것도 알지 못하지만 문서에는 아무 것도 언급되어 있지 않다고 생각되지만, PHP 세션을 오랫동안 사용해 본 적이 한번도 없습니다. – jlamp