Неужели невозможно написать приглашение php cli password, которое скрывает пароль в windows? - PullRequest
5 голосов
/ 18 ноября 2008

Я потратил несколько часов, пытаясь найти способ написания кроссплатформенного запроса пароля в php, который скрывает пароль, введенный пользователем. Хотя это легко сделать в среде Unix с помощью stty -echo, я пробовал различные способы вызовов passthru () и system (), чтобы заставить окна делать то же самое безрезультатно.

Я пробовал:

passthru('set /p pass=Password: ');
system('echo %pass% > out.txt');
$pass = file_get_contents('out.txt', 'r');

Это, кажется, висит на passthru ('set / p pass = Password:'); строка, не позволяя мне вводить какой-либо текст, и должна быть убита с помощью Ctrl-c.

Я также пробовал различные методы fgetc и fgets и печати символов возврата, чтобы скрыть ввод, так как это работает на других языках. Однако PHP не может взаимодействовать с текстом до возврата каретки.

Мне бы очень хотелось найти способ сделать эту работу, это невыполнимая задача или это то, что можно сделать?

Обратите внимание, что я знаю, что могу обернуть скрипт php в пакетный файл и передать пароль в качестве аргумента командной строки, но в этом случае это не сработает.

Ответы [ 3 ]

7 голосов
/ 18 ноября 2008

Кажется, что для PHP нет расширения IOCTL или STTY. Я нашел следующий трюк здесь :

<?php
echo 'Password: ';
$pwd = preg_replace('/\r?\n$/', '', `stty -echo; head -n1 ; stty echo`);
echo "\n";
echo "Your password was: {$pwd}.\n";
?>
1 голос
/ 18 ноября 2008

Вот решение для Windows, использующее расширение COM для PHP. Я проверял это на Windows XP с PHP 5.2.6.

<?php

$pwObj = new Com('ScriptPW.Password');

print "Password: ";
$passwd = $pwObj->getPassword();

echo "Your password is $passwd\n";

?>
0 голосов
/ 18 ноября 2008

Я думаю, что вы не можете сделать это в PHP со стандартной библиотекой, но вы можете сделать лучше:

Поймайте первую букву, затем отобразите *. Поймай второй, затем покажи два * ...

Эргономично, это удобно, потому что пользователь может видеть, что он ввел. Безопасность не подвергается риску, потому что если кто-то увидит пароль одну букву за одной буквой, он все равно увидит парня, который набирает его на клавиатуре. Но это все же не дает кому-то увидеть это случайно за один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...