一尘不染

使用PHP / MYSQL构建安全的公共API

mysql

我目前正在为一个非常繁忙的互联网网站构建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的安全方式。

想法和建议深表感谢。


阅读 307

收藏
2020-05-17

共1个答案

一尘不染

使用HMAC_SHA1和用户密码对请求进行签名怎么样?例如,您的URL:http://domain.com/api.php?api_option=list&api_user_name=USERNAME&api_user_password=PASSWORD

添加时间戳和/或随机字符串(随机数)并构建标准化的base_string:

$base_string = "api_option=list&api_user_name=USERNAME&timestamp=1296875073&nonce=hgg65JHFj";
$signature = hmac_sha1($base_string, PASSWORD);

那么新的URL将是:http
:
//domain.com/api.php?api_option=list&api_user_name=USERNAME×tamp=1296875073&nonce=hgg65JHFj&signature=kfvyhgfytgyr6576yfgu

服务器要做的是获取除签名之外的所有选项,然后使用相同的方法生成签名,并将其与客户端发送的签名进行比较,客户端签名应该相同。

2020-05-17