2012-12-03 126 views
2

我一直在試圖解決這個問題一段時間了。防止用戶使用其他計算機或設備登錄

我已經構建了一個正在我們客戶端服務器上運行的應用程序。客戶必須爲每個用戶購買使用該系統的許可證。因此,每個用戶在他/她的計算機上都有一個鏈接,只有該計算機才能訪問該應用程序。必須爲每個用戶註冊每臺計算機並存儲在數據庫中。

所以我必須限制用戶使用其他計算機/設備訪問應用程序。我的問題是如何從每臺計算機使用php(或任何其他語言)捕獲獨特信息,因此每次用戶嘗試登錄時都可以檢查這些信息。我已經瞭解到,你只能使用php獲取瀏覽器信息。所以我正在尋找一些能夠指引我走向正確方向的想法。

我試過的是在每臺PC中存儲獨特的cookie,並將它們註冊到數據庫中。但問題在於我們總會遇到一些問題,即有些用戶清除了Cookie,因此無法訪問應用程序。

+1

我會嘗試從連接PC(應該有一些C或C++中的代碼,也許它也可以從PHP調用)獲取用戶登錄的MAC地址,並存儲該MAC地址的許可證。唯一的問題是他們可以更換網卡(因此MAC將會改變),但是這並不常見(或者發生的機會太小)以刪除cookie。 – shadyyx

+0

下面是代碼如何檢索客戶端的MAC地址:http://stackoverflow.com/questions/1420381/how-can-i-get-the-mac-and-the-ip-address-of-a-connected -client-in-php Aaargh,剛剛看到客戶端必須在同一個局域網上才能檢索到他的MAC地址......嗯,那我現在沒有其他想法了...... – shadyyx

+0

@shadyx謝謝dat一定會朝着正確的方向運行 –

回答

5

將用戶鏈接到計算機不是一個好主意。爲什麼你要首先創建Web應用程序的獨立性和靈活性(假設它是一個Web應用程序,因爲它是PHP,或者你真的有命令行用戶?),然後將它限制在一個設備上,這可能會中斷,被竊取......也許該公司沒有固定的工作站,但每個用戶使用的計算機數量較少,因此每個用戶可能每天都使用不同的計算機。

如果你真的想要這樣的限制,你最好只限制每個用戶的會話數量。即:將會話ID和這些會話的用戶名記錄在表中。在每個請求上,更新表格以存儲請求日期時間,以便您可以檢查過期的會話。使用MySQL,您可以創建一個存儲類型爲MEMORY的表,這對於會話信息來說非常快速且非常有用。重新啓動數據庫服務器時數據將消失,但這通常不是這類信息的問題。

現在,有更多的可能繼續:

  1. 如果再次用戶登錄另一臺PC或瀏覽器上,它會收到一個新的會話ID。在這種情況下,在登錄過程中,您可以查看會話表以查看用戶是否打開了另一個會話ID。如果是這樣,請阻止登錄。

    如果會話超時,例如超過15分鐘時間,則可以允許登錄並刪除舊會話。

    缺點是,如果瀏覽器或PC崩潰,用戶必須等待超時時間後才能繼續在另一個位置上工作。這在任何工作環境中都可能不被接受。

  2. 更好的解決方案可能是:用戶只能有一個「活動」會話。如果用戶從另一個工作臺登錄,他們將自動獲得新的會話。如果發生這種情況,您可以接受新的會話並刪除舊的會話ID。如果他們繼續使用舊會話,則可以看到該會話不再位於會話表中,需要他們再次登錄。

    使用該解決方案,用戶將能夠在工作區之間快速切換,而無需等待,但如果兩個用戶同時使用相同的用戶名,則實際上每次請求都必須重新登錄。

但我真的會考慮兩次:爲什麼你要在這個限制?如果一家公司願意使用比允許的用戶多的軟件,他們也會願意改變你的PHP代碼來刪除這個檢查,這將是微不足道的。另外,如果你使用你的軟件過於惱人,他們可能會決定不使用它並搜索替代品。我認爲最好是相信你的客戶。

+0

系統在客戶端網絡上的自己的服務器上運行,該服務器由我們控制,所以他們不能改變編碼。這個限制是因爲客戶沒有辦法購買更多的許可證,他們在不同的計算機上爲一個以上的用戶使用了一個用戶帳戶。所以這就是我爲什麼決定這個限制。 –

+0

感謝您的消化,雖然我會考慮 –

+0

夠公平的,我會選擇選項2。 – GolezTrol

0

我不認爲你可以使用PHP來實現這一點。 PHP在服務器上運行,您可以從中檢索的唯一客戶端信息是IP,因爲它可以是動態的,所以它不起作用,或者如果它們在同一個局域網中,它對所有用戶都是一樣的。

這個想法是使用在客戶端運行的東西,然後javascript彈出一個好主意,但它有一個問題:用戶可以看到它,他可以看到它如何檢查或檢索信息,所以操縱它的行爲很容易。即使你是從javascript中檢索用戶的MAC,它也不會起作用,因此可以改變MAC。

我認爲你應該在客戶端安裝一些類型的exe(例如C,C++,C#,java),以確保它們不能從任何其他計算機或設備登錄。當然這應該在用戶使用網絡應用之前安裝並告知用戶。

另一方面,你爲什麼要做一個只能在1臺電腦上工作的網絡應用?我的意思是網絡應用程序的一個偉大的事情是他們幾乎可以在任何PC /設備上使用。

相關問題