2016-09-30 83 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()。我證實它只獲取用戶名部分。 –

相關問題