0

我在 C# 中创建了一个发送邮件和 SMS 的应用程序(通过 API 发送 SMS)。它运行良好,但我担心有人会反编译我的应用程序,该应用程序具有发送电子邮件帐户和 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,“黑客”就可以随心所欲地发送短信,而该应用程序旨在向他发送有关特殊事件的短信,例如他家中的安全漏洞。我也不希望黑客能够更改电子邮件的密码,这样其他用户就不会再收到他们的电子邮件了。
我怎样才能防止这种情况?

该代码旨在在客户自己的计算机/服务器上运行并提醒他,例如是否有运动检测。

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

4

3 回答 3

5

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

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

另外:不要在互联网上发送未加密的凭据。

于 2013-11-15T11:04:59.833 回答
2

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

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

您需要此密码的安全程度实际上取决于您。你真正需要问自己的问题是

  • 如果他们确实设法获得了密码,会造成什么样的损害?
  • 我有什么措施来检测任何类型的滥用?(例如 IP 记录等)
  • 如果有人滥用 API,我有什么程序?(例如密码更改)

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

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

于 2013-11-15T11:30:39.780 回答
1

考虑使用System.Security.Cryptography.ProtectedData

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

该类由非托管 DPAPI 的两个包装器 Protect 和 Unprotect 组成。这两种方法可用于加密和解密密码、密钥和连接字符串等数据。

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

于 2013-11-15T11:07:48.370 回答