【发布时间】:2011-02-04 17:21:58
【问题描述】:
我目前正在为一个非常繁忙的互联网网站构建 API。它是用 PHP 和 MySQL 编写的。现在这是我正在编写的第一个 API,它允许人们远程访问他们的帐户。 API 上线后,开发人员将能够使用它编写自己的工具。
现在我可以使用 API,但我不确定它是否完全安全。
一个可行的示例 URL 是:http://domain.com/api.php?api_option=list&api_user_name=USERNAME&api_user_password=PASSWORD
USERNAME: 是用户的实际用户名
PASSWORD: 是他们实际密码的 MD5 编码字符串。
如果详细信息匹配,则返回结果,如果不匹配,则返回错误。
所有外部$_GET 输入都得到mysql_real_escape_string() 处理。
我想让事情变得简单,但我不确定这种方式是否是一种安全的方式,可以让公共 API 直接利用用户帐户数据。
非常感谢您的想法和建议。
【问题讨论】:
-
在 URL 中包含密码哈希并不是一个好主意。更好的方法可能是拥有一个 API 密钥 - 它在用户和 API 之间调用某种形式的身份验证。
-
感谢所有 cmets,OAuth,对于我的需要来说似乎有点复杂,所以我正在构建自己的 API 密钥设置。我有一些工作,其中身份验证密钥存储在数据库中,并且 user_id 链接到它。此设置有效,但用户仍需要获取此密钥,如果其他人使用此 API 构建工具,用户需要能够使用他们注册的用户名/密码登录。所以我仍然看不到如何绕过一个初始的 $_GET url,它可以接收用户名和密码来远程生成 API 密钥。
-
建议: 1. 至少使用安全超文本传输协议 (HTTPS) 而不是 HTTP。 2. 通过 POST 发送登录信息(不是通过 URL/GET,因为它们会出现在日志中)