关于 HTTP POST 方法的安全问题:
我创建了一个名为“MyAPP”的用户:
{
"userdef": [
"view",
"create"
],
"api_key": "dzn8k7hj2sdgddlvymfmefh1k2ddjl05",
"user_id": "MyAPP",
"name": "MyAPP",
"creator": "admin",
"edit": [],
"dbdef": [
"view",
"create"
],
"querydef": [
"view",
"create"
],
"databases": {
"Gaming": {
"dbuser": "mydbuser_here",
"dbpass": "mypass_here"
}
},
"password":
"$6$rounds=665736$x/Xp0k6Nj.5qzuM5$G.3w6Py1s.xZ83RHDU55qonNMpJe4Le8nD8PqjYKoOtgbab7T22knJPqwHspoT6BQxp.5gieLFuD0SdD9dyvi/",
"email": "",
"view": []
}
然后我想发出一个 POST 以执行 SQL Pass-thru,如下所示:
http:///query/InsertBestScore/Score/99/ScreenName/GollyGolly.xml?apikey=dzn8k7hj2sdgddlvymfmefh1k2ddjl05
我在其中构建了一个查询并将其命名为“InsertBestScore”:插入 Gaming.Leaderboard(ScreenName,Score)值(:ScreenName,:Score);
如果我使用 POST 方法通过 POSTMAN 运行它:...然后我可以访问, 403 :
<?xml version="1.0" encoding="utf-8"?>
<SlashDB>
<http_code>403</http_code>
<description>Access was denied to this resource. Please log in with your username/password or resend your request with a valid API key.</description>
<url_template>/query/InsertBestScore/Score/{Score}/ScreenName/{ScreenName}.xml</url_template>
</SlashDB>
此外,我将从应用程序调用此 POST(或 PUT)请求,在我的例子中,是从 AWS Lambda 函数中运行的 Python 程序。
现在,我在文档中遇到了这个:
两个参数 API 密钥 SlashDB 还允许在此身份验证方法中使用两个参数凭据 - 应用程序 ID 和 api 密钥。这在与 3Scale 等 API 管理系统集成时可能会派上用场。默认情况下,标头和查询字符串参数为:
• appid - identifies certain application
• apikey - secret for the application
Request with API key in header - Access granted
...但是在上面的示例中,我看不到 appid 发挥作用的地方。你能告诉我如何调用 SlashDB 端点并传递 APIkey 并确保用户 ID 被称为 MyAPP。
因此,总而言之,文档提到: • 另一个应用程序使用 API 密钥进行身份验证,该密钥随每个请求一起发送。该应用程序被识别为 SlashDB 用户 App2,它使用数据库登录 db_admin。该应用程序可以有效地选择、更新、插入和删除数据。
所以我想实际上,做那个项目符号中的内容:将自己标识为用户(而不是 App2,我是用户 MyAPP),然后使用分配的 dbuser 和 dbpass 访问该“游戏”数据库。
主意?