2014-01-08 49 views
0

我有一個允許用戶註冊事件的應用程序。數據庫(SQL Server)具有名稱,電子郵件地址,地址和電話號碼。哪個更好NEWID或加密ID?

我通過查詢字符串傳遞id信息(例如event.aspx?id=____)。目前我使用NEWID()提供的「唯一」標識,性能非常好。

我在辯論這是否是一種合理安全的方法。我應該加密id值並將其傳遞給查詢字符串嗎?例如,通過使用NEWID來生成唯一標識,而不是使用主鍵列中的整數值,並根據應用程序的需要對其進行加密和解密。

我已經做到了這一點,並注意到性能受到影響。有什麼想法嗎?

回答

0

傳遞一個匿名密鑰非常好。更多的風險是SQL注入攻擊,但是如果你正在採取預防措施(例如使用存儲過程,參數化SQL等),你應該沒問題。

+0

謝謝。我使用參數化的SQL。 – rossboss

0

如果有人可以更改id的值並仍然註冊(從而更改/查看其他人的註冊信息),那麼是的,您有問題。

如果你確保一個人只能修改自己的註冊,那麼你可能沒有問題。在這種情況下,您可以使用SQL ID列而不是生成NEWID()(未加密 - 如果他們知道ID,威脅是什麼?)。如果只有正確的人可以修改/註冊,那麼揭示ID不應該成爲問題。雖然我很好奇,但爲什麼簡單的加密/解密會對性能產生負面影響。

+0

感謝您的評論。如果某人更改了id的值,並且該值不在數據庫中,那麼他們將無法註冊。如果有人將id的值更改爲存在的實際值,那麼我的代碼將檢查它們是否應該訪問該記錄。 – rossboss

+0

@rossboss那麼使用NEWID甚至SQL ID就不會有問題,因爲了解/更改ID不會帶來安全風險。我已經使用了很多加密的ID,但是現在不想再做了。他們很難看。 – MikeSmithDev

+0

謝謝你們。我同意邁克加密的ID是醜陋的。說實話,我使用NEWID的部分原因是因爲它看起來有點複雜,我不必擔心用空格替換+。 – rossboss