草庐IT

php - API Key PHP/MYSQL 的作用

coder 2023-10-22 原文

关于 PHP/MYSQL 的 API key 的快速问题。过去几天我一直在阅读大量书籍,但只需要进一步说明和一些最佳实践指南,因为我对 HTML、JS、JQUERY、PHP/MYSQL 还很陌生。

我的服务器端代码是PHP,它连接到MYSQL数据库。数据库有一个 users 表,它将存储 idusernamepassword 等列(使用 password_hash( ) 通过 PHP5,因此它不存储纯文本值) 和 api_key。我还将考虑添加一些内容,例如 last_seenlast_login 以进一步提高安全性。

我希望 API key 用于验证用户以访问服务器上的资源(例如 parseID.php,它采用 POST 参数返回用户输入的 ID 的 JSON 结果)。如果需要,用户也可以在脚本中使用此 API key 来访问 JSON 输出。

我的思考过程是:

  • 已登录的用户点击按钮生成 API key 。
  • 脚本生成一个 API key (使用 password_hash())并将其与数据库中的用户 ID 保存
  • 当用户想要访问 protected 资源时,他们将在 GET/POST(或存储在 session 中??)中提供给定的 API key ,这将尝试将其与数据库中的匹配并返回结果(授权与非授权)。
  • 如果通过身份验证,用户就可以访问该资源。

我还将使用 SSL 来加密用户/资源之间的流量。

我有点不清楚,想知道这里可以采取哪些其他步骤/最佳实践来确保 API key 和用户信息的安全?

我在这里和谷歌上搜索的所有信息都是几年前的,并且使用 MD5 等做法来加密 key 。

谢谢!

最佳答案

这是正确的 - API key 已分配给用户,并且需要调用来传递 API,以便对用户进行身份验证并检查他们可以做什么。

我建议的一些更改:

An already logged in user clicks a button to generate an API key.

如果用户只能拥有一个 API key ,那么您和用户在创建帐户时生成 API key 并使其在他们的个人资料/设置区域可用(即使其成为一对一的)会更容易-one 关系而不是一对零或一)。您想要按需生成它的唯一原因是您是否必须给予明确的许可,例如通过一些审核过程。

无论哪种方式,您还希望让用户重置 API key (主要是为了防止可能的泄漏)。

顺便说一句,一个更常见的模式是支持多个 API key 。例如如果你看一下 Twitter 的开发者仪表板,一个用户可以创建 N 个“应用程序”,每个应用程序都会自动获得自己的 API key 。这种方法有一些优点,例如您可以围绕应用程序收集元数据,API key 被分区(更好的安全性),每个应用程序的许可模型可以不同,并且您可以撤销单个应用程序而不影响所有使用。不过,所有这些对您来说可能都有些矫枉过正。

stored in a session??

Session 更像是一个与来回传递 cookie 相关的网络概念。你不需要那么复杂。在每个请求路径中都需要 API key 应该很容易。

When a user wants to access a protected resource

您可能还需要在每个 请求中提供 API key ,而不仅仅是针对 protected 资源的请求。无论如何,它对用户来说应该一样简单,它可以让您在每个用户的基础上执行诸如速率限制和日志请求之类的操作。

关于php - API Key PHP/MYSQL 的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30316485/

有关php - API Key PHP/MYSQL 的作用的更多相关文章

  1. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

  4. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  5. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  6. ruby - 字符串文字前面的 * 在 ruby​​ 中有什么作用? - 2

    这段代码似乎创建了一个范围从a到z的数组,但我不明白*的作用。有人可以解释一下吗?[*"a".."z"] 最佳答案 它叫做splatoperator.SplattinganLvalueAmaximumofonelvaluemaybesplattedinwhichcaseitisassignedanArrayconsistingoftheremainingrvaluesthatlackcorrespondinglvalues.Iftherightmostlvalueissplattedthenitconsumesallrvaluesw

  7. ruby - 为什么这个 eval 在 Ruby 中不起作用 - 2

    你能解释一下吗?我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):'a=2'第二个来源给了我这个表达式来评估:'a+3'这个有效:a=2eval'a+3'这也有效:eval'a=2;a+3'但我真正需要的是这个,但它不起作用:eval'a=2'eval'a+3'我想了解其中的区别,以及如何使最后一个选项起作用。感谢您的帮助。 最佳答案 您可以创建一个Binding,并将相同的绑定(bind)与每个eval相关联调用:1.9.3p194:008>b=binding=>#1.9.3p194:009>eva

  8. ruby-on-rails - Spring 不起作用。 [未初始化常量 Spring::SID::DL] - 2

    我无法运行Spring。这是错误日志。myid-no-MacBook-Pro:myid$spring/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/lib/spring/sid.rb:17:in`fiddle_func':uninitializedconstantSpring::SID::DL(NameError)from/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/li

  9. ruby-on-rails - Simple_form 必填字段不起作用 - Ruby on Rails - 2

    我在RoR应用程序中有一个提交表单,是使用simple_form构建的。当字段为空白时,应用程序仍会继续下一步,而不会提示错误或警告。默认情况下,这些字段应该是required:true;但即使手动编写也行不通。该应用有3个步骤:NewPost(新View)->Preview(创建View)->Post。我的Controller和View的摘录会更清楚:defnew@post=Post.newenddefcreate@post=Post.new(params.require(:post).permit(:title,:category_id))ifparams[:previewButt

  10. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

随机推荐