如何透過Email的超鏈結登入系統並直接進入指定的畫面

摘要:如何透過Email的超鏈結登入系統並直接進入指定的畫面

我們的系統中可能會需要讓某些特定的使用者(通常是高位者)為了操作上的【便利性】,讓使用者可以直接點【超鏈結】就直接的【進入系統】,並到達某特定的【網頁(文件)

 

一般的做法可能是將【帳號密碼存於Cookie】的方式進行,但是這樣的方式不是很恰當,其次再給予超鏈結的時候,也會將要導回哪些畫面的資訊直接放在超鏈結中,這樣容易讓使用者知道您的程式會處理哪些欄位的資訊,造成使用者透過嘗試更改超鏈結資訊方式瀏覽到使用者不該瀏覽的資料。

例如:http://www.blueshop.com.tw/doc.asp?docid=1234

有心的駭客看到這樣的資訊,可能就會嘗試著把1234改成1233或者1235來查看,程式上一不小心就會讓使用者看到不該看的東西

 

而且將帳號密碼存於Cookie中,容易讓【木馬程式】透過【收集Cookie】的方式得知帳號密碼

 

所以如果要能夠比較安全的方式,小喵提供以下這個方式給大家參考

 

1.      超鏈結中帶的QueryString是一組GUID1(公鑰)
例如:http://www.blueshop.com.tw/abc.asp?GID=405CACB3-F658-4DD5-82E5-D1DA7DDFDB7E

2.      進入系統後,從資料庫中找到此組【GUID1公鑰】提供給哪個【使用者】使用、以及哪些【文件超鏈結資料】

3.      透過2.的【使用者】,在【TA】驗證該【使用者】存於Cookie中的【GUID2私鑰】以及限定的IP,讓只有【限定的IP】並且擁有【GUID2私鑰】的人才可以開啟,否則將拒絕進入

4.      GUID2私鑰給予的方式:使用者登入後,檢查資料庫中是否有設定該【使用者】與【IP】有授權可以擁有【GUID2私鑰】→如果有→產生【GUID2私鑰】存放於資料庫中,並產生Cookie存放【GUID2私鑰】


 

首先會用的兩個資料表:

使用者私鑰管理表(TA)

PK

UserId

使用者帳號

PK

IP

使用者電腦IP

 

GUID2

私鑰

 超鏈結公鑰管理表(TB)

PK

GUID1

公鑰

PK

UserId

使用者帳號

 

URLInfo

超鏈結資訊

 

 

 

 

 

 

 

使用者點選超鏈結後,首先從取得的【GUID1公鑰】透過【TB】取得這份文件是允許哪些【使用者】可以瀏覽,接著將此【使用者】透過【TA】取得該使用者允許在哪台電腦【IP】並且需要擁有哪個【GUID2私鑰】才能看。

 

換言之,需要【GUID1(公鑰)+允許的電腦IP+GUID2(私鑰)】三個條件缺一不可,才能夠進入該網頁(文件)

 

要實現以上的方式,需要有三個公用程式

1.      正常登入後【產生私鑰】

2.      產生Email中超鏈結時,【產生公鑰】

3.      鏈結回來後【驗證3要件】

 

 

這樣的設定方式,適用於一個人擁有多個電腦,也適用於各系統自行運用。

 


FAQ:

Q1:請問如果使用者擁有多台電腦,是否適用
A1:可以適用,因為TA中的主索引為UserId + IP,所以一個使用者可以設定多台電腦,各每台電腦各自擁有各自的私鑰

Q2:請問如果一個網頁(文件)需指定三人可瀏覽,是否適用
A2:可以適用,因為TB中主索引為GUID1 + UserId,所以一份文件可以指定多人瀏覽

Q3:請問如果信件被別人攔截,是否可以直接點選超鏈結就進入系統
A3:不會。信件中的超鏈結中是公鑰,必須加上【GUID2私鑰】及【IP】兩個條件都符合才能進入

Q4:請問,如果使用者借用別人的電腦登入,會不會在別人電腦中儲存【GUID2私鑰】
A4:不會,儲存私鑰必須符合【正常登入】【符合限制IP】才會儲存,如果會擔心,可將儲存的動作作成按紐讓使用者按下【在這台電腦儲存私鑰】的按鈕後才儲存【私鑰】
 


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat