密码存储在代码中。如何保证安全?

时间:2013-11-15 10:54:58

标签: c# security

我在C#中创建了一个发送邮件和短信(通过API发送短信)的应用程序。它工作得很好,但我担心的是有人会反编译我的应用程序,它具有发送emailaccount和API的凭据。 API与

一起使用
private void sendSMS(String username, String password, String destination, String body, String sender)
{
    String browserURL = "http://api.messagebird.com/api/sms?username=" 
        + username + "&password=" + password + "&destination=" 
        + destination + "&body=" + body + "&sender=" + sender;
    _w.Navigate(browserURL);
}

只需通过反编译或使用wireshark,“黑客”就可以按照自己的意愿发送短信,而应用程序的目的是向他发送有关特殊事件的短信,例如他家中的安全漏洞。我也不希望黑客能够更改电子邮件的密码,因此其他用户不再收到他们的电子邮件。
我怎么能阻止这个?

该代码设计为在客户自己的计算机/服务器上运行,并在有动作检测时提醒他。

我感谢大家的答案。我选择让客户填写自己的邮件和短信服务凭证,以避免安全漏洞。

3 个答案:

答案 0 :(得分:5)

不要在代码中放置秘密。将它们放在磁盘上加密,安全的地方,并在需要时读取它。

混淆正是它所说的:它隐藏而不是隐藏。

另外:不要通过互联网发送未加密的凭证。

答案 1 :(得分:2)

保护密码最安全的方法就是不要将其全部存储起来,至少在本地存储。

只要您存储任何客户端,数据的安全性就会与其所处的硬件安全性一样强。例如,如果有人要在公共机器(例如网吧)上安装您的应用程序,任何知道自己在做什么的人都有可能访问您的密码。如果您可以确定该应用程序仅安装在私人计算机上并且仅由“好”用户使用(最终您不能),那么问题就不那么严重了。

您需要这个密码的安全性真的取决于您。你真正需要问自己的问题是

  • 如果 设法获取密码,可以造成什么样的损害?
  • 我有什么措施来检测任何类型的滥用? (例如IP记录等)
  • 如果有人滥用API,我会采取哪些程序? (例如密码更改)

第3点在本地存储密码时会出现一些问题。如果您检测到滥用API并因此更改了密码,您如何将这些更改级联到客户端?

对我来说,避免所有这些问题最安全的方法是让您的应用查询您的API服务器并让它返回某种身份验证令牌(也就是API令牌)。然后,此令牌将与任何请求一起传递回您的(希望是安全的)服务器,该服务器验证令牌,如果获得授权,则将SMS请求转发到SMS服务器。

答案 2 :(得分:1)

考虑使用System.Security.Cryptography.ProtectedData

  

此类提供对Data Protection API(DPAPI)的访问   可在Microsoft Windows 2000及更高版本的操作系统中使用。这个   是由操作系统提供的服务,而不是   需要额外的库。它使用用户或   用于加密或解密数据的机器凭据。

     

该类包含两个非托管DPAPI保护包装器   和Unprotect。这两种方法可用于加密和解密   密码,密钥和连接字符串等数据。

http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx