OS 특정 기능 (예 : exec()
, passthru()
)에 의존하지 않고 htpasswd 파일을 프로그래밍 방식으로 빌드 할 수 있습니까?프로그래밍 방식으로 htpasswd 빌드
답변
.httpasswd 파일은 지정된 해시 함수에 따라 특정 형식의 텍스트 파일 일뿐입니다. 당신이 MD5를 사용하는 경우 그들은 다음과 같이 :
베이스 64로 인코딩 로그인, 콜론, $ apr1 $, 소금 및 1000 배의 MD5있어foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
. 당신은 SHA1을 선택하면 그들은 다음과 같이 :
로그인, 콜론, 문자열 {SHA}과베이스 64로 인코딩 된 SHA1 해시의foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
.
언어는 MD5 또는 SHA1과 base64로 하나의 구현이있는 경우 당신은 그냥이 같은 파일을 만들 수 있습니다
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
Trac은 htpasswd를 Python으로 대체하여 제공되며, 귀하가 선택한 언어로 이식 할 수 있습니다 : htpasswd.py.
첫째,이 양식을 작성 :
<FORM METHOD="POST" ACTION="<? echo $_SERVER['PHP_SELF']; ?>" onSubmit='return ValidateForm()'>
Username<br /><INPUT TYPE="TEXT" NAME="user[]"><br /><br />
Password<br /><INPUT TYPE="PASSWORD" NAME="password1[]"><br />
<INPUT TYPE="PASSWORD" NAME="password2[]"><br /><br />
<INPUT type=submit name="submit" VALUE="Create .htpasswd entry" onclick="document.all.submit.style.visibility='hidden'">
</FORM>
그런 다음,이 PHP 코드는 당신을 위해 비밀번호를 생성합니다 : 당신이 파일이 $htpasswd_text
에 HTPASSWD에
if (isset($_POST['user']) && isset($_POST['password1'])) {
if($_POST['password1'] == $_POST['password2']) {
$user = $_POST['user'];
$password1 = $_POST['password1'];
$htpasswd_text = "";
for ($i = 0; $i < count ($user); $i++) {
$htpasswd_text .= "$user[$i]:".crypt($password1[$i],CRYPT_STD_DES)."";
}
echo "<br />Copy this line to your .htpasswd file:";
echo "<pre style=\"border-bottom-width:1px;border-bottom-style:solid;\">";
echo nl2br($htpasswd_text);
echo "</pre><br />";
} else {
echo "<pre style=\"border-bottom-width:1px;border-bottom-style:solid;\">Passwords do not match !</pre><br />";
}
}
실제 텍스트를 추가 할을 변하기 쉬운.
암호 형식 해시는 더 이상 사용되지 않아야합니다. htpasswd의 현재 기본값은 md5입니다. – bitmusher
에서 :
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
다음은 형식에 대한 자세한 정보는의를 PHP 웹 사이트에서 다음과 같은 방법으로 crypt()를 사용할 수 있습니다 :
이것은 물론 기존의 파일 전체를 덮어 쓰므로 어떤 종류의 연결을 원할 것입니다.
100 % 확신 할 수는 없지만 확실합니다.
htpasswd 파일의 암호 형식 해시는 사용되지 않아 사용해서는 안됩니다. . 현재 기본값은 md5 변형입니다. – bitmusher
MD5 형식 암호도 생성하는 코드를 찾았습니다. http://techtalk.virendrachandak.com/using-php-create-passwords-for-htpasswd-file/ –