在PHP中获取客户端计算机的用户名

时间:2016-02-26 21:29:06

标签: php apache

我有一个PHP网页需要在Windows 7中启动GUI应用程序。要启动的应用程序和apache服务都在同一台机器上运行。 Apache运行由管理员启动的服务。现在我的机器具有LDAP身份验证,许多用户将登录到该计算机,打开该网页。该网页将使用SCHTASKS启动GUI应用程序,因此应用程序以当前登录的本地用户身份启动。现在我想存储启动应用程序的用户,即使用PHP登录的当前用户。我使用了getenv('用户名'),' whoami'一切都给管理员,因为Apache由管理员执行。有没有办法获取使用PHP登录的用户的名称?在此先感谢。

3 个答案:

答案 0 :(得分:0)

您没有告诉我们正在运行的操作系统(也不是窗口环境)。你提到'whoami'因此我假设你在谈论Unix / Linux和XWindow系统。

除非您的HTTP应用程序身份验证与操作系统身份验证密切相关,否则您需要使用诸如识别之类的内容来获取调用用户的uid(实际上,识别最好是假设HTTP用户的身份相同作为Unix用户)。

确定了用户之后,您需要能够以该用户身份执行编程,这意味着一些具有超级访问权限的jiggery Pokery会在您的系统中产生巨大的漏洞,如果您没有完全正确的话。

但是这个谜题仍然缺少一块。 Unix和Xwindow是多用户系统。要在用户屏幕上打开一个窗口,您需要知道哪个屏幕才能打开它。我无法想出任何确定性的方法。你可以简单地假设它的localhost:0.0但这是一个非常混乱的解决方案。

使用自定义mimetype创建包含一组参数的可下载文件会更简单,该自定义mimetype映射到shell脚本,该脚本可以解析文件并执行所需的操作(它将继承uid和$ DISPLAY来自浏览器)。请注意,此方法(使用适当的shell脚本也适用于其他操作系统)。

BTW这仍然是非常危险的 - 有一个很好的理由说明为什么http /浏览器使服务器很难在浏览器外的clieñt上调用处理。

答案 1 :(得分:0)

PHP?不可能。

Javascript将数据发送到php脚本?这是可能的。

PHP是一种服务器端语言,这意味着它永远不会在客户端计算机上运行,​​在运行时,您只能知道他们告诉您的客户端的事情,通常,他们的用户名不会是一个他们。

另一方面,Javascript是您可以在客户端计算机上运行的东西,使用它,您可以获得用户的用户名;从这里,您可以发出ajax请求,将该信息发布到您的php脚本。

答案 2 :(得分:0)

这是一种快速而肮脏的方式来获得你想要的东西。

<?php
    //create a temporary file with a unique name (to avoid conflicts with other users)
    $tempfile = tempnam("/directory/to/save/info","prefix_");

现在我们将创建一个计划任务,将用户名输出到文件...

    shell_exec('SCHTASKS /F /Create /TN "_getuser" /TR "whoami > ""'.$tempfile.'"" 2>&1" /SC DAILY /RU INTERACTIVE /IT');

以上将输出域名和用户名,例如:COMPUTERNAME / User 如果您只想要用户名,请替换&#34; whoami&#34;使用&#34; echo%USERNAME%&#34;像这样:

    shell_exec('SCHTASKS /F /Create /TN "_getuser" /TR "echo %USERNAME% > ""'.$tempfile.'"" 2>&1" /SC DAILY /RU INTERACTIVE /IT');

现在运行任务并将其删除

    shell_exec('SCHTASKS /RUN /TN "_getuser"');
    shell_exec('SCHTASKS /DELETE /TN "_getuser" /F');

现在,我们可以获得这样的用户名:

    $username = file_get_contents($tempfile);
    echo "Ran task as: ".$username;

那就是它! 最后..删除文件

    unlink($tempfile);
?>