我的网站提供付费(非免费) API。所以我需要识别所有传入的ajax调用并拒绝未知请求。换句话说,我只想要将JSON结果返回到:
这是我的代码:
$ip == '::1'
如您所知,{{1}}确定了我网站的请求。现在我想知道我正在做什么安全?或者有更好的方法来处理它?
答案 0 :(得分:1)
您正在做的是安全的:如果Web服务器配置正确,则未经授权的用户无法使用“假”IP访问该服务。
有没有更好的方法来处理?的是
为每个授权的API使用者提供唯一的大型授权密钥。
然后,将请求API使用者在请求的标头中发送每个请求的密钥。类似的东西:
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API使用者在发出请求时必须再设置一个标头值,但这很简单。
另一方面,通过IP授权API使用者有许多缺点。主要的一点是每个用户必须拥有一个静态IP地址。
编辑,据我所知,您可以通过JavaScript客户端(浏览器)代码直接使用网络服务。
在这种情况下,JavaScript代码应该将ajax调用发送到您的API使用者服务器
API使用者服务器将请求发送到您的Web服务(发送令牌)。获取数据。最后,将检索到的数据作为对ajax调用的响应发送给客户端。
这样,JavaScript代码中不会公开身份验证令牌。不是您的令牌,也不是您客户的令牌。
答案 1 :(得分:0)
叹息。
我没有想到在JS脚本中存储令牌的任何安全方法。它是公开的,它太糟糕了。
我获得API的唯一方法是混合使用用户名/密码验证和身份验证密钥(令牌)。
让我解释一下这些步骤。
您的客户必须在您的网页中输入用户名和密码。提交表单将触发一个JS脚本,该脚本将用户名和密码发送到您的服务器。
您服务器上的脚本会将用户名和密码与存储在数据库中的用户名和密码进行比较。如果这些与存储的匹配,脚本将创建一个随机的auth密钥,将其存储*(再次,在数据库或任何内容中)并将其返回给客户端。
*存储的身份验证密钥必须足够长(24个字符和+),并且必须在定义的延迟后过期。
客户端会将其存储在cookie或其他内容中(为了保持"登录"),并且每次向服务器发送请求时都必须提供auth密钥:服务器每次都需要检查身份验证密钥的有效性 - 客户身份。
除了那种认证外,我不会想到任何其他事情。
我讨厌JS出现这种安全问题。
但是这样,客户端的用户名和密码就不会被存储,并且auth密钥会过期。
PS:请先将用户密码哈希,然后再将其存储在服务器上。这样,在技术上不可能知道原始密码。您无法忘记数据被盗的可能性。