2012-08-27 199 views
1

我正在使用C#下面的代碼從我的網站下載文件:隱藏密碼

WebClient webClient = new WebClient(); 
webClient.Credentials = new System.Net.NetworkCredential("username", "password"); 
webClient.DownloadFile("http://example.com/file.txt", "file.txt"); 

當滿足一定的條件的文件只下載了,所以我不希望用戶能夠訪問我的網站上的文件

我的焦點是,如果一個古怪的用戶反編譯代碼,他會找到密碼並能夠訪問我網站上的所有文件。

我讀過一個安全的方法來保存密碼是存儲它的散列,但我不知道如何在這個例子中實現它。

我有什麼選擇讓我的密碼安全並使用戶無法找到它?

+0

在網上搜索如何加密/解密密碼與鹽值有大量的例子在線.. – MethodMan

+4

在這種情況下散列不會幫助你:你不能從該散列獲取明文版本你需要。 –

+0

您應該創建僅提供對公共資源的訪問權限,因此不需要保護的憑證。還有一件事要擔心。或者只是不放在首位。 –

回答

2

你根本就沒有。用戶給你密碼做東西,而不是相反。

如果用戶必須證明「某些條件」,然後將這些特定條件的證明傳遞給服務器,並讓它決定是否允許下載。

+0

+1讓服務決定。這是唯一可靠的方法。 –

+0

因此,如果使用php服務器,我可以將數據從程序發佈到服務器,並且如果它符合某些要求,服務器可以用該文件進行響應?我的服務器編程技巧有點有限,我會從哪裏開始呢? – Johan

+0

新的SO問題。 「我需要檢查客戶端中的條件X,Y,Z,並使用它來授權服務器上的某些內容,我在服務器上使用PHP和客戶端上使用C#」。答案將取決於X,Y和Z是什麼。 –

1

有沒有辦法來防止這種情況。如果您的程序能夠在條件X下訪問該文件,則用戶可以將程序誘騙到條件X中,並且無論如何獲取該文件。你可以讓它更難,但你不能讓它變得不可能。

5

一個令人發人深省的現實:你不能像這樣保護程序中包含的信息。

一個必須做:選擇一個用戶名/密碼是用於訪問特殊文件這個單一程序需要 - 你的「訪問我的整個網站」的用戶名和密碼。

但是,只要知道你所做的就是增加一點障礙,任何想要檢查程序並找到用戶名和密碼的人。

唯一「正確」的方法是根據用戶自己的憑據來做到這一點;例如,他們的用戶名和密碼在您自己的系統中。然後你需要根據這些信息給他們訪問,你的程序需要提示他們。

0

如果數據在程序本身中,您可以將它們視爲已經暴露給用戶。如果憑據在用戶計算機上,無論您採取多少措施來解決此問題,總有可能找到解決方法。

你可以做的是爲你的程序實現一個登錄表單,併爲用戶提供登錄信息。然後,當用戶輸入登錄信息時,請在服務器端檢查是否存在憑證(通常通過檢入數據庫),如果匹配,則將它們發送給文件。

但是,與往常一樣,用戶只是與其他人共享登錄信息等問題。