2011-10-23 96 views
0

所以我目前沒有代碼,但由於以下問題我還沒有開始。安全地上傳文件C#/ PHP

我想有一個網站(用PHP編寫),允許用戶上傳文件,但我也想有一個在Windows桌面上運行的C#應用​​程序,並且可以自動上傳文件。我的問題與安全有關。

首先,從PHP的角度來看,就是簡單地用MD5或類似的東西對網站上的帳戶進行哈希和醃製?

此外,我該如何安全地存儲和保存我的C#應用​​程序中的本地用戶的憑據?幾乎像餅乾,除了我會自己管理它。我正在尋找一個高水平的答案,以及我應該使用什麼特定的工具(或者我應該在完全追求這個之前閱讀的內容)。

預先感謝您的時間。 :)

+1

當使用證書進行處理時,md5哈希值不再足夠,請查看Sha256或更高版本以獲取強哈希值,還應該使用https處理連接,並要求證書使其更安全。至於在本地保存證書,您可以將其加密或散列到文件中。即使您要做所有這些事情,也絕不能保證您的憑據不會以某種方式受到損害。 – Joakim

+0

sha256不錯的提示我會去看看。至於散列/加密證書到一個文件我將如何驗證我的PHP網站?即當有人經常登錄時,我將不得不自己散列它,但如果本地證書被散列,我會遇到問題。 – AnthonyHurst

+0

您不能在本地存儲憑據並確保其安全。 任何本地操作都可以進行反向設計和複製。 特別是使用C#等語言,可以輕鬆地對其進行反編譯(並且在很多情況下可以反混淆)。 我可以考慮一些選擇,但它們的適用性很大程度上取決於您的項目的具體情況。 – Svarog

回答

1

要回答這兩個問題...

首先,散列和與MD5鹽析不再是100%安全的,因爲人可以用彩虹表來快速破解散列。您可能想要查看產生較長散列的內容以防止彩虹表攻擊。

如果您想在客戶端安全地存儲身份驗證令牌(如「記住我」複選框),您可以在服務器中有一個表,每次用戶訪問php頁面時都會存儲隨機字符串。爲了使其更安全,您可以散列該PC的唯一值,例如網卡的MAC地址。

它的作用是什麼?

1)當用戶第一次從C#應用程序登錄,您將創建一個存儲用戶ID,MAC地址的記錄,並且在很長的隨機字符串表。然後您將此隨機字符串返回到C#應用程序以存儲在本地文件中。

2)當c#應用程序再次訪問網頁時,它會傳遞到您的PHP應用程序,MAC地址和存儲在那裏的隨機字符串。如果它匹配一條記錄,那麼我們知道c#app的用戶標識。

3)PHP端應該重新生成另一個隨機字符串,並將其發送回c#應用程序以覆蓋現有本地存儲的身份驗證令牌。這將確保令牌更改很多,並且人們不能簡單地製作存儲令牌的文件的副本,並且能夠訪問服務器。

希望這已經夠清楚了。

-1
  1. 鹽漬sha256哈希將罰款。用沒有存儲在數據庫中的東西來加鹽。數據來自兩個不同的來源將使得暴力更難。

  2. 它取決於C#應用程序。如果只有一個用戶,則使用您的公鑰通過SSH傳輸文件。如果出現問題,您可以隨時撤銷密鑰。

+0

特定用戶的鹽是否存儲在數據庫中根本不會影響暴力強制。除非你建議所有用戶都有一口鹽,否則這是一個糟糕的主意。 – TheEvilPenguin

+0

那麼,在存儲到數據庫中之前對密碼進行醃製和哈希處理更像是一種嗅覺,而不是100%的安全性。這是爲了防止人們隨便讀取密碼。如果黑客足夠認定,那麼你就沒有太多辦法來阻止他們以這種或那種方式破解密碼。 – iWantSimpleLife