Javascript 在本地主机上唯一识别客户端

Javascript 在本地主机上唯一识别客户端,javascript,php,apache,google-chrome,Javascript,Php,Apache,Google Chrome,我在未连接到internet的windows笔记本电脑上安装了apache。笔记本电脑有多个用户帐户。假设其中两个用户帐户是“Adam”和“Sally”。我在localhost上有一个项目,需要通过Chrome浏览器区分不同窗口的用户 我知道直接通过浏览器检测用户名是一个严重的安全漏洞,但我不在乎:我完全控制了计算机,项目无法通过网络访问,因此没有安全问题。我愿意以任何可以想象的方式作弊,包括构建一个自定义的.exe来帮助我。我只需要区分不同的账户。它不需要是用户名,但任何替代ID都需要为给定用

我在未连接到internet的windows笔记本电脑上安装了apache。笔记本电脑有多个用户帐户。假设其中两个用户帐户是“Adam”和“Sally”。我在localhost上有一个项目,需要通过Chrome浏览器区分不同窗口的用户

我知道直接通过浏览器检测用户名是一个严重的安全漏洞,但我不在乎:我完全控制了计算机,项目无法通过网络访问,因此没有安全问题。我愿意以任何可以想象的方式作弊,包括构建一个自定义的.exe来帮助我。我只需要区分不同的账户。它不需要是用户名,但任何替代ID都需要为给定用户保留

我要求的是开箱思考


我怎样才能创建一个可以在Chrome中打开的页面,页面上会显示“Hi Adam”或“Hi Sally”甚至“Hi-=[GUID]=-”,而访问者从未键入过他们的姓名/GUID。

据我所知,您有两种选择

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


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

为此,您可能应该使用类似于或的东西来代替chrome,这样您就不必牺牲安全性

下面是我运行nw.js sdk并只加载演示页面、启动开发工具并检索用户名的图片。 非常直截了当。按照节点文档进行操作,然后在那里做任何您想做的事情

您可以在
HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Run
或执行类似
echo setCurrentUser(“%USERNAME%”)之类操作的本地组策略中通过任务计划程序或注册表执行c:\your\u project\u directory\set current user.js
,然后您就有了一个脚本,该脚本定义了
函数setCurrentUser{alert(“Hello”+s);/*…*/}
,然后是一个脚本导入,如

如果您只想在文件系统中执行任何操作,请将启动Chrome的快捷方式更改为
--允许从文件访问文件--user data dir=c:\your_project_directory--禁用web安全
,然后重新启动电脑(或者干脆关闭所有Chrome.exe进程,包括后台)

编辑:更新了关于使用--允许从Pritam Banerjee的文件访问文件的说明。如果你走那条路,他会得到学分。:)

如果您对尝试NW.js感兴趣,下面是一个完整的示例:

package.json

{
“名称”:“nw你好用户”,
“版本”:“0.0.1”,
“main”:“index.html”
}
index.html


你好
您好,document.write(process.env.USERNAME)!
下面是命令行:

这是最终产品

既然您用PHP标记了您的问题,您只需创建一个包含以下内容的index.PHP文件:

Hi <?= getenv("USERNAME") ?>
Hi
getenv(“USERNAME”)
返回USERNAME环境变量的值

更新:感谢TylerY86提供了更正确的获取用户名的方法。另请注意他在下面的评论:

您还必须确保Apache实例正在 用户的上下文,而不是作为服务。如果你尝试这个例子,如果 您得到的是类似于系统或IUSR_机器的东西,而不是用户 姓名,您需要调整


JavaScript中无法识别用户。但你可能可以编写一个扩展名来实现这一点。很明显,阻止你的不是JavaScript,而是DOM和浏览器安全保护。允许从文件访问文件在Chrome上不再起作用。您必须使用:
--禁用web安全性--user data dir
感谢您的提醒,添加到帖子中,添加提及。投票赞成。输出
domain\user
(其中domain可能是计算机名,没有合适的域),您可能希望('USERNAME')只获取用户,或者更直接(可能仍然包括域)。使用PHP是解决此问题的最简单方法,如果它是作为WAMP包的一部分安装的话。@TylerY86谢谢,我将其更改为get\u current\u user()。我验证了它只得到用户名部分。我对你的答案投了赞成票。学究式正确代码的爱好者和做出努力的人。:),您不希望
获取\u当前\u用户
,正如您所说,它获取脚本文件的所有者。。。whoami和getenv会更好。您还必须确保Apache实例是在用户上下文中运行的,而不是作为服务运行的。如果您尝试此示例,如果您得到类似于
SYSTEM
IUSR\u MACHINE
的内容而不是用户名,则需要进行调整。