Apache가 사용자 비밀번호를 노출하지 못하도록 하려면 어떻게 해야 합니까?

Apache가 사용자 비밀번호를 노출하지 못하도록 하려면 어떻게 해야 합니까?

Apache에서 기본 인증(특히 LDAP를 통해, htpasswd도 사용)을 사용하는 경우 아래의 PHP/Ruby/Python 코드에서 REMOTE_USER 변수를 사용할 수 있습니다. 이는 인증을 웹 서버로 오프로드하는 데 매우 유용합니다.

우리 사무실 환경에는 SSL을 통해 이와 같이 작동하는 많은 내부 응용 프로그램이 있으며 모두 매우 안전합니다. 그러나 Apache는 PHP_AUTH_USER(=REMOTE_USER) 및 PHP_AUTH_PW 변수를 PHP 내부의 모든 애플리케이션에 노출합니다. (PHP_AUTH_PW에는 사용자가 입력한 일반 텍스트 비밀번호가 포함되어 있습니다.) 이는 앱이 사용자 이름과 비밀번호를 수집할 수 있음을 의미합니다. 아마도 Python과 Ruby에서도 동일한 정보를 사용할 수 있을 것입니다(세 가지 모두 현재 사용 중이며 PHP는 단계적으로 중단되고 있습니다).

그렇다면 Apache가 이러한 작업을 수행하지 못하도록 어떻게 방지할 수 있습니까?

한 가지 아이디어는 Kerberos 협상 인증(비밀번호를 노출하지 않고 SSO의 이점이 있음)을 사용하는 것입니다. 그러나 일부 브라우저(Chrome 및 경우에 따라 Firefox)에서는 자동으로 기본 인증으로 대체되어 비밀번호가 다시 노출됩니다. .

답변1

누군가가 나처럼 이 질문에 걸려 넘어지는 경우를 대비해:

Apache 2.4.5 이상에서는 다음을 사용할 수 있습니다.AuthBasicFake비밀번호를 가리는 지시문:

AuthBasicFake toto tata

결과:

PHP_AUTH_USER=toto
PHP_AUTH_PWD=tata

사용자 이름을 유지하려면:

AuthBasicFake %{REMOTE_USER} tata

결과는 다음과 같습니다.

PHP_AUTH_USER=value-of-remote-user 
PHP_AUTH_PWD=tata

REMOTE_USER는 영향을 받지 않습니다.

답변2

불가능할 것 같지만 보세요http://bytes.com/topic/php/answers/798619-prevent-setting-php_auth_pw
게시물 #8은 변수를 설정 해제하는 스크립트를 실행하기 위해 auto_prepend_file을 사용하는 것을 제안합니다.
깨끗한 솔루션은 아니지만 존재하는 해결 방법입니다...

AuthType Digest를 사용해 보셨나요?

답변3

반경이 맞습니다. 그럴 수 없습니다.

추가 조사 후에 나는 이것이 기본적으로 ID 주장에 대한 교과서 시나리오라는 것을 깨달았습니다. 신뢰할 수 있는 ID 공급자는 사용자의 ID를 클라이언트 애플리케이션에 "증명"합니다. SAML 2.0 사양이 잘 맞는 것 같습니다.

더 이상의 인프라 계층 없이 벗어나고 싶었지만 IDP에는 simpleSAMLphp[1]을, Apache 측에는 mod_mellon[2]을 사용하겠습니다. (하루 정도만 수정하면 작동합니다.) 이렇게 하면 비밀번호 문제가 해결되지 않지만 제어할 수 있는 위치로 이동됩니다.

여담: Sun의 OpenSSO는 상당히 강력하지만 Oracle이 이를 제거했으며 관련 OpenAM 프로젝트의 미래는 아직 명확하지 않습니다.

[1]:http://rnd.feide.no/simplesamlphp단순SAMLphp

[2]:http://code.google.com/p/modmellon/mod_mellon

답변4

해결 방법이 있습니다. 내 .htaccess에 다음을 추가했습니다.

php_value auto_prepend_file "global_prepend.php"

"global_prepend.php" 파일에 다음 PHP 줄을 추가했습니다.

$_SERVER["PHP_AUTH_PW"]="Shh! It's a secret!";

이제 내 자격 증명으로 로그인할 수 있으며 내 실제 비밀번호는 더 이상 저장되지 않습니다.

관련 정보