2016-09-30 56 views
1

我在未连接到互联网的Windows笔记本电脑上安装了apache。笔记本电脑有多个用户帐户。假设两个用户帐户是“Adam”和“Sally”。我有一个localhost项目,需要通过Chrome浏览器区分不同的Window用户。唯一识别本地主机上的客户端

我明白通过浏览器直接检测用户名是一个严重的安全沙箱违规,但我不在乎:我完全控制了计算机,并且该项目不是可以访问的,所以没有安全问题。我愿意以任何可以想象的方式作弊,包括构建自定义.exe来提供帮助。我只需要区分不同的帐户。它不需要由用户名,但任何替代ID将需要持续该给定的用户。

我要求在盒子外面思考。

我怎样才能创建一个页面,我可以在Chrome浏览器中打开“Hi Adam”或“Hi Sally”甚至是“Hi - = [GUID] = - ”,而访问者不会输入他们的名字/ guid 。

+1

JavaScript没有办法识别用户。但是你可以写一个扩展名来完成它。 – epascarello

+1

要清楚的是,它不是JavaScript阻止你,它是DOM和浏览器安全*保护你。 – TylerY86

回答

0

就我所知,您有2个选择。

1)您可能会要求用户在第一次使用该页面时将其识别并将其存储到本地存储中。由于这些机器上的用户不同,他们的本地应该是分开的。

2)您可以在本地主机上部署一个小型Web服务,该服务从系统获取用户证书并在GET请求时返回。

2

您应该使用类似NW.jsElectron而不是chrome,因此您不必牺牲安全性。

下面是我运行nw.js sdk并加载演示页面的图片,调出开发工具并检索我的用户名。 picture of NW.js development console 非常直截了当。遵循节点文档并在那里做任何你想做的事情。

你可以有通过在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run或本地组策略执行类似echo setCurrentUser("%USERNAME%"); > c:\your_project_directory\set-current-user.js任务调度程序或注册表中的batch file that runs on startup,那么你只要有一个脚本,定义<script>function setCurrentUser(s) { alert("Hello "+s); /* ... */ }</script>后跟一个脚本导入像<script src="set-current-user.js"></script>

如果你只是希望能够在文件系统中执行任何操作,将启动Chrome的快捷方式更改为--allow-file-access-from-files --user-data-dir=c:\your_project_directory --disable-web-security,然后重新启动PC(或者只是终止所有chrome.exe进程,包括背景)。

编辑:更新了关于从Pritam Banerjee使用--allow-file-access-from-files的注释。如果你走这条路,他会得到信用。 :)

如果您有兴趣尝试NW。JS,这里有一个完整的例子:
example package.json example index.html

package.json

{ 
    "name": "nw-hello-user", 
    "version": "0.0.1", 
    "main": "index.html" 
} 

index.html

<!DOCTYPE html> 
<html> 
<head> 
<title>Hello!</title> 
</head> 
<body> 
    Hello <script>document.write(process.env.USERNAME)</script>! 
</body> 
</html> 

这里的命令行:
example command line

这是最终产品!
example screenshot

+1

“--allow-file-access-from-files”在Chrome上不起作用。你将不得不使用:'--disable-web-security --user-data-dir' –

+0

感谢您的支持,添加到帖子,补充提到。上投了反对票。 – TylerY86

1

既然你用PHP标记你的问题,你可以只创建一个index.php文件,其内容如下:

Hi <?= getenv("USERNAME") ?> 

getenv("USERNAME")返回USERNAME环境变量的值。

更新:感谢TylerY86提供更正确的方式来获取用户名。从下面他的评论也指出:

您也可以肯定的是,Apache实例在用户的 上下文中运行,而不是作为一个服务。如果你尝试这个例子,如果 你得到类似SYSTEM或IUSR_MACHINE而不是用户名称 ,你需要调整。

+1

[''whoami''](https://technet.microsoft.com/en-us/library/cc771299.aspx)输出'domain \ user'(其中domain可能是计算机名称,不包括本域),您可能需要['getenv'](http://php.net/manual/en/function.getenv.php)('USERNAME')来获取用户或['get_current_user()'](http:// php.net/manual/en/function.get-current-user.php)更直接(可能还包括域名)。 – TylerY86

+1

使用PHP是解决这个问题最简单的方法,*如果它作为WAMP包的一部分安装*。 – TylerY86

+1

@ TylerY86谢谢,我将它改为get_current_user()。我证实它只获取用户名部分。 –

相关问题