単発のバイト / Subversion 1.0.0 on Debian / htpasswd.php (2) / ProFTPDの設定 / htpasswd.php (3)
投稿日: 2004年03月04日 更新日: 2017年07月22日
単発のバイト
Photoshopでお絵かき。前の人が作ったファイルを眺めながら、シェイプを多用して書いてみた。Illustrator使ったほうが楽のような・・・
環境が結構カスタマイズしてある。Photoshopの設定はもちろん、日本語入力がIMEじゃなくてAtokなのが一番戸惑う。
Subversion 1.0.0 on Debian
Subversion 1.0.0 on Debian - wakatonoの戯れメモ
htpasswd.php (2)
- パスワードを変更ができる
- ユーザを追加できる
- ユーザの削除は未対応
まだろくに検証して無いのでバグがあったらツッコミで教えてください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>htpasswd</title>
</head>
<body>
<form method="post" action="htpasswd.php">
User:<br>
<input type="text" name="user" value=""><br>
Password:<br>
<input type="text" name="password"><br>
<input type="submit" name="submit">
</form>
<?php
$filename = 'secret/.htpasswd';
$user = $_POST['user'];
$password = $_POST['password'];
if (isset($_POST['password'])) {
$change = false;
$salt = substr($password, 0, 2);
$file = file($filename);
$fp = fopen($filename, 'w');
flock($fp, LOCK_EX);
foreach($file as $line) {
list($u, $p) = explode(':', rtrim($line), 2);
if($u == $user) {
$p = crypt($password, $salt);
$change = true;
}
fwrite($fp, "{$u}:{$p}\n");
}
if(!$change) {
fwrite($fp, "{$user}:" . crypt($password, $salt) . "\n");
echo htmlspecialchars($user) . "が追加されました";
} else {
echo htmlspecialchars($user) . "のパスワードを更新しました";
}
flock($fp, LOCK_UN);
fclose($fp);
}
?>
</body>
</html>
ProFTPDの設定
今はこれ
ServerName "debian"
ServerType inetd
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nobody
TimesGMT off
ListOptions "-a"
UseReverseDNS off
IdentLookups off
AuthPAMAuthoritative on
AuthPAMConfig ftp
DefaultRoot ~
<Directory />
AllowOverwrite on
</Directory>
htpasswd.php (3)
$saltはランダムな2文字にしたほうがよろしいかと.
確かに。パスワードの最初の2文字では心配だったんですが、単にcryptの第二引数を省略すればランダムで作ってくれるとのこと。
以下の関数をGAIJIN.atで見つけていたんですが、PHPにランダムで生成してもらうほうが簡単。
function genSalt(){
// *** zwei zufallige Zeichen generieren ***
srand((double)microtime()*1000000);
$random=rand();
$rand64="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$salt=substr($rand64,$random%64,1).substr($rand64,($random/64)%64,1);
$salt=substr($salt,0,2);
return($salt);
}
あと、MD5とかSHA1でハッシュ化するとより安全かも。ラジオボタンでDES,MD5,SHA1を選択したりして。
追記:
cryptの第二引数を省略したらMD5 saltが生成された。crypt関数のマニュアルを読んでみたら
saltが指定されない場合、システ ムのデフォルトの暗号化手法がMD5でない限りPHPはデフォルトで標準の2 文字DES saltを自動的に生成します。暗号化手法がMD5の場合、MD5互換 のsaltが生成されます。
少なくとも手元のマシン(Redhat Linux 7.3)ではデフォルトの暗号化手法はMD5らしい。
もしDESで作りたい場合はやはり自前で2文字生成する必要がありそう。
この記事へのコメント
※ このコメントは旧ブログシステム(tDiary)からの移行です。
なかみつさんからのコメント(2004-03-05 00:51:10)
細かいことですが,$saltはランダムな2文字にしたほうがよろしいかと.crypt()の二番目の引数が無い場合,自動的にsaltを作成してくれるので便利です.
hajimeさんからのコメント(2004-03-05 02:16:22)
これは便利ですね。自前でランダムな2文字を用意するとコードが長くなるので避けたかったんですが、これなら逆に短くなりますし。
なかみつさんからのコメント(2004-03-05 10:12:53)
あうっ〜.PHPは殆どSolarisで使っていたのでsalt省略したらてっきりDESされるものかと思ってました(^^;;;
hajimeさんからのコメント(2004-03-05 10:27:57)
こうなったらシステムの暗号化方式を変えるしか!(違)crypt関数で暗号化方式を指定できたらいいのに・・・
名前:宮内 はじめ
Code for Nagoya名誉代表
E2D3名古屋支部長
プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。