当前位置: 首页 > 面试题库 >

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

鲜于浩淼
2023-03-14
问题内容

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

想法和建议深表感谢。


问题答案:

使用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

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



 类似资料:
  • 问题内容: 我正在开发基于NodeJs / Express的网站项目,对于某些UI部分,我正在使用Jquery ajax请求来获取辅助数据。 我们如何处理对我们的Rest API端点的一些基本控制,这些端点被浏览器用于ajax调用?我在考虑某种令牌授权,但是一旦被拦截,它也可以被其他客户端(脚本等)使用,那么我们如何保护服务器免受不必要的请求呢?在这种情况下,还应使用其他哪些控件(识别来自同一客户

  • 问题内容: { “rules”: { “users”: { “$uid”:{ //Private whatever under “uid” but Public is exposed “.read”: “auth != null && auth.uid == $uid”, “.write”: “auth != null && auth.uid == $uid”, 我创建这些规则是为了让用户拥有公共

  • Docker 镜像会将 Dockerfile 中每一步结果保存进其 layer ,如果是从源码构建镜像的话会将代码留在镜像中。为了解决这种问题 DaoCloud 推出了「安全镜像」构建功能。 安全镜像构建流程包含三个步骤:代码编译、文件提取、打包镜像。通过分离编译和打包,产生一个安全、精巧、不含源代码的生产级别镜像。 开始构建安全镜像 我们以DaoCloud/secure-python-sampl

  • 嗨,我正在使用svg绘制线条,但我的问题是,我正在使用公共URL绘制线条`varsvgnode=document.createElementNs('http://www.w3.org/2000/svg','svg'); 如何在不使用公共URL的情况下实现相同的功能

  • 4.4.1.2 创建/使用公共服务 公共服务是应该由未指定的大量应用使用的服务。 有必要注意,它可能会收到恶意软件发送的信息(意图等)。 在使用公共服务的情况下,有必要注意,恶意软件可能会收到要发送的信息(意图等)。 下面展示了如何使用startService类型服务的示例代码。 要点(创建服务): 将导出属性显式设置为true。 小心并安全地处理接收到的意图。 返回结果时,请勿包含敏感信息。 A

  • 4.1.1.2 创建/使用公共活动 公共活动是应该由大量未指定的应用程序使用的活动。 有必要注意的是,公共活动可能收到恶意软件发送的意图。 另外,使用公共活动时,有必要注意恶意软件也可以接收或阅读发送给他们的意图。 要点(创建活动): 将导出属性显式设置为true。 小心并安全地处理接收到的意图。 返回结果时,请勿包含敏感信息。 下面展示了创建公共活动的示例代码。 AndroidManifest.