2009-06-12 9 views
3

htpasswdを実行してパスワードを更新できるPHPページがあります。彼らの入力を害する最善の方法は何ですか?私は安全なパスワードを許可したいので、入力を多く制限したくありません。これは私が持っているものです。どのように改善することができますか?PHPパスワード文字列のサニタイズ

何か他のことは、ユーザは、彼が何かにパスワードを変更したと信じて行いますので、私は、「危険な文字」に空の文字列とにpreg_replaceを使用することはありませんが、あなたは、EXEC
$newPasswd = preg_replace('/[^a-z0-9~!()_+=[]{}<>.\\\/?:@#$%^&*]/is', '', $inputPasswd); 
$cmdline = $htpasswd . " " . $passwd_file . " " . escapeshellarg($username) . " " .escapeshellarg($newpasswd); 
exec($cmdline, $output, $return_var); 

答えて

8

ecscapeshellarg関数はPHPに組み込まれており、シェルに基づいてシステム間で異なるため、テキストに消毒を施し、「安全でない」文字をexecに渡すことはできません。

http://us2.php.net/manual/en/function.escapeshellarg.php

+0

escapeshellargを使用すると、悪い文字を削除する必要はありませんか? – JonDrnek

+0

Escapeshellargは、シェルによって解釈される可能性のあるものを削除します。 (または、例えば '=> \'のように変更してください)私はhtpasswdに精通していませんが、シェルインジェクション攻撃を防ぐことができます。 – MiffTheFox

1

...だから、ユーザーはにパスワードを設定します彼が入れたものとは違ったもの...ユーザーにいくつかのキャラクター(怪しいキャラクターを捕捉して表示する)が検証をパスしなかったというフィードバックをユーザーに伝える方が良いでしょう。

それ以外は、かなり良いと思います。私はそれが可能な文字の広い範囲をユーザーに提供し、彼は安全なパスワードを作成する以上のものを必要としないと思う。また、パスワードに許可されている文字を推測する必要がないようにユーザーに伝えることも有用です。

+0

これは実際にプラグインの一部であり、私は、ユーザーと相互作用する能力が限られています。実際のユーザーが悪いキャラクターを入力する可能性は十分低く、私はサポートコールに対処しています。 – JonDrnek

+0

パスワードの変更が早くも失敗する可能性がありますが...その点を見てみましょう – JonDrnek