2011-02-26 110 views
4

我們正在構建一個PHP多租戶應用程序。每個公司的帳戶將在其自己的子域abcorp.example.com上運行。該應用程序允許公司編寫和發佈內容(常見問題解答等)供客戶閱讀。沒有用戶名/密碼的身份驗證?

他們會告訴他們的客戶訪問:abcorp.example.com/以閱讀內容。或者他們會在其安全的Web應用程序中鏈接到該URL。

然而,這些公司可能不希望任何人通過去閱讀的內容,以abcorp.example.com/

所以,我的問題是有沒有辦法提供一些基本的認證沒有進入的用戶名和密碼認證。我在想某種隱藏記號的加入超鏈接或類似的

我的目標了一句:

  1. 如果用戶直接在瀏覽器中鍵入abcorp.example.com/,他們不會能夠看到的網頁,因爲他們不認證或通過令牌英寸

  2. 避免使用的用戶名和密碼

另一種選擇是推薦URL身份驗證

+0

您是否在現實世界中有一個多租戶SAAS應用程序的示例? – allnightgrocery 2011-02-26 20:23:22

回答

-2

您可以使用基本散列法,在系統和每個公司系統(每個公司的不同密鑰並且未公開發布)上存儲共享祕密密碼或「密鑰」,然後您將祕密密碼與子域在鏈接中包含摘要作爲參數。然後,通過在您身邊運行相同的算法並與摘要進行比較來驗證它。

鏈接可能看起來像

abc.example.com/?d=b5939ca22f5dcf345b4000641995478c5910dbd1607b1bdadcbf4a8618a95211

其中摘要是:

$d = hash('sha256', $secret_password.$subdomain); 

或包括引用者:

$d = hash('sha256', ($secret_password.$subdomain.$_SERVER['HTTP_REFERER']));

要克服的障礙是確保每個公司都可以根據公司特定的關鍵/算法支持這些鏈接的正確生成 - 並且每個公司都有所不同,因此一家公司不能爲其他公司生成鏈接。

它比沒有驗證或公共共享令牌更好,但我確信它仍然存在漏洞。

+0

如果一家公司收藏/竊取了另一家公司的URL?那麼所有這些都是沒有用的。 – stillstanding 2015-03-05 10:17:10

+0

需要注意的一點是,當令牌位於這樣的URL中時,它們可能會被記錄到Web服務器的日誌中。這可能會讓你容易泄漏令牌 – 2015-03-11 09:06:41

1

當然,如果有人將令牌公開,它將打開訪問任何發現它的人。

我想每個公司可以使用一個共享的令牌鏈接到他們的網頁,例如:

abccorp.example.com/?t=4rrfwr23rwads3

每個令牌可以存儲在一個文件或數據庫。

當有人請求一個頁面時,它會檢查存儲在服務器上的$ _GET ['t']的值。如果匹配,則加載頁面的其餘部分。當然,這個變量將不得不在整個網站中進行,並且包含在每個鏈接中。

再一次,這不會很安全。一個暴露的令牌可以讓整個世界訪問該網站。

1

您的「隱藏令牌」的想法基本上是sessions的工作方式。會話可用於識別用戶(即跟蹤用戶在瀏覽網站時的行爲),並且通過將會話ID傳遞到鏈接中或存儲在cookie中來實現。

但是,使用沒有任何其他類型認證的會話本質上是不安全的!當您公開驗證和跟蹤用戶本身的方式時,用戶可以修改或僞造他們的身份驗證。例如,用戶可以更改爲會話ID傳遞的值或更改存儲在cookie中的值。

請閱讀關於sessions and security的PHP手冊部分。

0

您也可以使用客戶端IP地址作爲令牌,讓不同的IP地址訪問系統的不同(部分/實例)。但是,這種做法並不是很安全,因爲(1)你無法知道客戶端PC是誰,(2)IP地址可能被欺騙。也許你可以開發額外的規格;只允許IP地址在辦公時間內訪問,或者檢查客戶端瀏覽器(用戶代理),並根據客戶端正式使用的用戶代理進行檢查。

+0

感謝大家的幫助! – user635800 2011-02-27 22:41:50

+0

您可以通過upvoting評論來顯示您的欣賞。 – Pr0no 2012-02-13 10:00:04

相關問題