我是不是应该在参数中传递数据库用户和密码来调用 Web 服务以从数据库中获取数据

Posted

技术标签:

【中文标题】我是不是应该在参数中传递数据库用户和密码来调用 Web 服务以从数据库中获取数据【英文标题】:Should I pass database user and password in parameters to call a web service to get data from database我是否应该在参数中传递数据库用户和密码来调用 Web 服务以从数据库中获取数据 【发布时间】:2013-12-04 05:41:13 【问题描述】:

这是一个基本问题。我正在编写一个 android 应用程序,它使用 Web 服务从数据库中获取数据。我将一些参数传递给 Web 服务,它以 JSON/XML 格式返回数据。我的问题是我应该将数据库用户名和密码作为参数传递以打开数据库连接,还是应该将这些凭据保存在 Web 服务中? 如果我将这些凭据保存在服务中,任何知道我的 Web 服务位置和我传递的参数的人都可以访问我的数据库并获取数据。 如果我要求调用者将这些凭据作为参数传递,那么在从移动应用程序调用 Web 服务时通过 Internet 发送此信息是否安全。

我发现 this 示例关于在调用 Web 服务时保护您的数据,这很好地解释了即使您使用的是 https,那么发送纯文本仍然不安全。

谢谢

【问题讨论】:

把它们放在服务器端! 那我如何验证谁在调用网络服务? 试试 Oauth 或类似的系统。永远不要从客户端发送数据库详细信息。您也可以尝试使用一些加密短语来识别您的客户 【参考方案1】:

最好保留一些唯一的密钥,而不是发送密码和用户名。如果您担心安全问题,那么您应该在您身边以及服务器端对凭据进行一些加密。我不认为 android 客户端需要如此严格的加密方法。使用经过验证的简单密钥。

试试这个:Web 服务凭据 - OpenID/Android AccountManager? Click here

【讨论】:

【参考方案2】:

我认为this 的回答会解释你想问什么。

'silverback' 是对的。永远不要从客户端请求这些凭据,这是不安全的。您可以简单地使用某种加密对客户端进行身份验证...

Here is an example from to generate authentication token:

(day * 10) + (month * 100) + (year (last 2 digits) * 1000)
for example: 3 June 2011

(3 * 10) + (6 * 100) + (11 * 1000) = 
30 + 600 + 11000 = 11630
then concatenate with user password, example "my4wesomeP4ssword!"

11630my4wesomeP4ssword!
Then do MD5 of that string:

05a9d022d621b64096160683f3afe804
When do you call a request, always use this token,

https://mywebservice.com/?token=05a9d022d621b64096160683f3afe804&op=getdata
This token is always unique everyday, so I guess this kind of protection is more than sufficient to always protect ur service.

【讨论】:

谢谢..您提供的链接解释了我想知道的内容... :)

以上是关于我是不是应该在参数中传递数据库用户和密码来调用 Web 服务以从数据库中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 URL 参数中传递用户名和密码 (Dart & Flutter)

在 mongodb 中,作为密钥而不是匿名用户的用户名和密码传递啥?

将命令行参数和文本文件传递给程序

存储密码的位置 - 第 3 方 API

如何在pyqt5中的两个窗口之间传递参数?

如何传递包含@作为参数的用户名