当前位置:  开发笔记 > 编程语言 > 正文

PHP中的命令行密码提示

如何解决《PHP中的命令行密码提示》经验,为你挑选了3个好方法。

我正在编写一个命令行工具来帮助我的网络应用程序.它需要密码才能连接到服务.我希望脚本显示密码提示,所以我不必将其作为命令行参数传递.

这很容易,但我希望它不会在键入屏幕时回显密码.我怎么能用PHP做到这一点?

在纯PHP(没有system('stty'))和用字符替换字符的情况下的加分点*.

编辑:

该脚本将在类似unix的系统(linux或mac)上运行.该脚本是用PHP编写的,很可能就是这样.

此外,为了记录,stty这样做的方式是:

echo "Password: ";
system('stty -echo');
$password = trim(fgets(STDIN));
system('stty echo');
// add a new line since the users CR didn't echo
echo "\n";

我宁愿不system()接听电话.



1> 小智..:

在sitepoint上找到.

function prompt_silent($prompt = "Enter Password:") {
  if (preg_match('/^win/i', PHP_OS)) {
    $vbscript = sys_get_temp_dir() . 'prompt_password.vbs';
    file_put_contents(
      $vbscript, 'wscript.echo(InputBox("'
      . addslashes($prompt)
      . '", "", "password here"))');
    $command = "cscript //nologo " . escapeshellarg($vbscript);
    $password = rtrim(shell_exec($command));
    unlink($vbscript);
    return $password;
  } else {
    $command = "/usr/bin/env bash -c 'echo OK'";
    if (rtrim(shell_exec($command)) !== 'OK') {
      trigger_error("Can't invoke bash");
      return;
    }
    $command = "/usr/bin/env bash -c 'read -s -p \""
      . addslashes($prompt)
      . "\" mypassword && echo \$mypassword'";
    $password = rtrim(shell_exec($command));
    echo "\n";
    return $password;
  }
}


在Windows 7上不起作用.根据各种在线论坛,除了Windows XP和2003 Server之外,其他任何工作都无法使用.

2> Randy..:

根据您的环境(即不在Windows上),您可以使用ncurses库(特别是ncurses_noecho()函数来停止键盘回显,并使用ncurses_getch()来读取输入)以获取密码而不在屏幕上显示密码.



3> Seldaek..:

您可以使用我的hiddeninput.exe文件获取真正的隐藏输入,而不会在屏幕上的任何位置泄露信息.



如果删除最后一个回显,则密码永远不会显示,但您可以使用该密码进行验证.


出于显而易见的原因,在我的linux机器上不起作用.
我确信该项目中的hiddeninput.exe不会对安全构成重大威胁。.但是,使用来自互联网的随机二进制Blob处理密码并不是一个好习惯。即使这段代码是安全的,它也只是恶意行为者注入令人讨厌的东西的占位符...
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有