2008-11-18 35 views
5

Tôi đã dành vài giờ cố gắng tìm một phương tiện viết một lời nhắc mật khẩu nền tảng chéo trong php mà giấu mật khẩu được người dùng nhập vào. Trong khi điều này có thể dễ dàng thực hiện trong môi trường Unix thông qua việc sử dụng stty -echo, tôi đã thử các phương thức khác nhau của các cuộc gọi passthru() và system() để làm cho các cửa sổ làm điều tương tự để không có kết quả.Có thực sự không thể viết một lời nhắc mật khẩu php cli mà giấu mật khẩu trong cửa sổ?

Tôi đã thử:

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

Điều này dường như treo trên passthru ('set/p vượt qua = Mật khẩu:'); dòng mà không cho phép tôi nhập bất kỳ văn bản nào và phải bị giết bằng Ctrl-c.

Tôi cũng đã thử các phương pháp khác nhau của fgetc và fgets và in các ký tự backspace để ẩn đầu vào vì thao tác này hoạt động ở các ngôn ngữ khác. Tuy nhiên, PHP không xuất hiện để có thể tương tác với văn bản trước khi trở về vận chuyển.

Tôi thực sự muốn tìm một cách để thực hiện công việc này, đây có phải là một nhiệm vụ không thể hoặc là điều này có thể được thực hiện? Lưu ý rằng tôi biết rằng tôi có thể bọc tập lệnh php trong một tập tin thực thi và chuyển mật khẩu như một đối số dòng lệnh, nhưng điều đó không có tác dụng đối với tôi trong trường hợp này.

Trả lời

1

Đây là giải pháp Windows, sử dụng phần mở rộng COM cho PHP. Tôi đã thử nghiệm điều này trên Windows XP với PHP 5.2.6.

<?php 

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

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

echo "Your password is $passwd\n"; 

?> 
7

Dường như không có phần mở rộng IOCTL hoặc STTY cho PHP. Tôi thấy cách lừa sau here:

<?php 
echo 'Password: '; 
$pwd = preg_replace('/\r?\n$/', '', `stty -echo; head -n1 ; stty echo`); 
echo "\n"; 
echo "Your password was: {$pwd}.\n"; 
?> 
+0

Tôi nghĩ rằng anh ấy đang tìm kiếm sự hỗ trợ của Windows không hỗ trợ. –

+0

Ngữ cảnh là gì? Câu trả lời rõ ràng sẽ là sử dụng một hộp văn bản với mật khẩu echo, nhưng dường như bạn - những gì - nhắc đến một giao diện điều khiển trên máy chủ? – dkretz

+0

@doof: Vâng, OP cho biết anh ta đang chạy một tập lệnh CLI. Anh ta không nói riêng Windows, nhưng anh ta đã nói "batch file" là giao diện Windows. –

-1

Tôi nghĩ rằng bạn không thể làm điều đó trong PHP với thư viện chuẩn nhưng bạn có thể làm tốt hơn:

Catch chữ cái đầu tiên, sau đó hiển thị một *. Nắm bắt phần thứ hai, sau đó hiển thị hai * ...

Về mặt tiện lợi, điều này rất tiện lợi vì người dùng có thể thấy những gì anh ấy đã nhập. An ninh không có nguy cơ bởi vì nếu ai đó có thể nhìn thấy mật khẩu một chữ cái bằng một chữ cái, anh ta có thể thấy anh chàng gõ nó trên bàn phím. Nhưng nó vẫn ngăn không cho ai đó nhìn thấy nó một cách tình cờ trong một lần.

Các vấn đề liên quan