关于HTTP的POST方法的安全性的问题:
我创建了一个名为" MyAPP":
的用户static int usage(const char *argv0)
{
/* Print usage using argv0 as if it was argv[0] */
return EXIT_SUCCESS;
}
int main(int argc, char *argv[])
{
if (argc < 1)
return usage("(this)");
if (argc < 2 || !strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
return usage(argv[0]);
/* argv[0] and argv[1] are non-NULL, argc >= 2 */
然后我想发出一个POST来执行SQL Pass-thru 比如:
http:///query/InsertBestScore/Score/99/ScreenName/GollyGolly.xml?apikey = dzn8k7hj2sdgddlvymfmefh1k2ddjl05
我构建了一个查询并将其命名为&#34; InsertBestScore&#34;: 插入Gaming.Leaderboard (ScreenName,分数) 值 (:ScreenName,:Score);
如果我使用POST方法通过POSTMAN运行: ...然后我获得了访问权限,403:
{
"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(或PUT)请求,在我的示例中是从AWS Lambda函数中运行的Python程序。
现在,我在文档中遇到了这个:
两个参数API密钥 SlashDB还允许在此身份验证方法中使用两个参数凭据 - app id和api key。当与3Scale等API管理系统集成时,这可能会派上用场。默认情况下,标头和查询字符串参数为:
<?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>
...但是在上面的例子中,我不知道appid在哪里发挥作用。 你能告诉我如何调用SlashDB端点并传递API密钥并确保用户ID被称为MyAPP。
总而言之,文档提到: •另一个应用程序使用API密钥进行身份验证,该密钥随每个请求一起发送。该应用程序被识别为SlashDB用户App2,它使用数据库登录db_admin。实际上,这个应用程序可以SELECT,UPDATE,INSERT和DELETE数据。
所以我想实际上,做那个子弹中的内容:将自己标识为用户(而不是App2,我是用户MyAPP),然后使用分配给它的dbuser和dbpass来访问#34;游戏&#34;数据库中。
主意?
答案 0 :(得分:1)
答案 1 :(得分:0)
好的,这里确实有两个问题:
广告。 1:请求必须清除两个授权障碍。
第一个是SlashDB强加的,执行查询的用户必须列在查询定义屏幕的Execute字段中。这是在Configure - &gt;下完成的。查询 - &gt;查询中的“编辑”按钮。
第二个障碍是数据库强加的。正在执行POST请求的SlashDB用户必须映射到具有对Gaming.Leaderboard表的INSERT权限的物理数据库用户。不用说,这个数据库用户必须与表所在的数据库模式相关联。
广告。 2.要启用appid,用户api密钥必须由冒号“:”分隔的两个部分组成。第一部分将被解释为appid,第二部分将被解释为apikey。
为此,请使用配置 - &gt;用户 - &gt;有问题的用户的“编辑”按钮。然后只需在API键的开头添加一个冒号,然后在冒号左侧输入所需的appid。应用程序必须提供两个键才能执行请求。请注意,这些键的名称(即appid)可在/etc/slashdb/slashdb.ini中配置。
此功能背后的原因是为API管理平台提供便利,这有助于密钥管理,尤其是当API将向第三方开发人员公开时。