2011-02-16 113 views
4

我們目前有一個winforms應用程序,允許用戶登錄以訪問系統。認證系統是一個定製的kludge。我正在執行一項更改,將用戶NT用戶名和域名與他們現有的自定義帳戶相關聯,以便他們不需要重複登錄。我使用WindowsIdentity.GetCurrent()。Name然後將該信息存儲在數據庫表,映射到他們的舊的accountid。我想知道的是,如果用戶能夠通過反映真實域名的計算機名稱來訪問網絡,那麼這是可能的嗎?這可能會使惡意用戶訪問某人的帳戶。我想真正的問題是:是否有辦法區分SQL Server域和用戶域,而不僅僅是對名稱進行字符串比較。用戶欺騙域名

+0

我可能完全不瞭解您的情況。這聽起來像你正在使用SQL身份驗證來訪問數據庫並將連接字符串存儲在你的winapp中的某處。如果是這樣的話,人們可能會從winapp竊取連接字符串並獲得對數據庫的訪問權限。關於您的擔憂,您可以考慮存儲SID而不是用戶名和域名。是的,這仍然沒有保證,但至少這使得酒吧更高。網絡上沒有可用的工具來幫助您在域中僞造SID。我認爲我們仍然可以做到這一點,但它應該是非常棘手的 – 2011-02-17 03:36:03

+0

謝謝哈維,這是我走的路。我現在使用用戶名/域名信息存儲令牌所有者ssid。這應該有效地解決某人設置自己的域名並使用VPN冒充另一個用戶的問題。 – cdaq 2011-02-17 18:56:50

回答

2

是的,如果您的應用程序使用SQL身份驗證來訪問數據庫,如果您將數據庫連接更改爲使用可信身份驗證,則SQL Server將根據域控制器對登錄進行身份驗證。因此,儘管用戶可以訪問應用程序,但他們將無法訪問驅動應用程序的數據庫。如果你這樣做了,你還可以將用戶名的捕獲移動到一個SQL Server存儲過程,以確保捕獲的名稱與域名相匹配,而不是本地用戶。

+0

我同意這是最佳方式,但這種改變將是巨大的,不會被管理部門批准。 – cdaq 2011-02-16 23:08:32

1

服務器不能信任客戶。

如果客戶端可以獲取並使用憑據登錄到數據庫服務器,您就會烤麪包。

如果您的服務器只是一個數據庫服務器,並且您的應用程序不使用受信任的連接,並且您的應用程序不會提示輸入數據庫憑證,那麼您將進行烘烤。 (見前面的聲明)

我很懶。我將修補WindowsIdentity.GetCurrent()。如果我感覺喜歡它,則返回「Administrator」。