gpt4 book ai didi

php - 保护可从 Android 访问的 REST API

转载 作者:IT老高 更新时间:2023-10-28 21:48:47 26 4
gpt4 key购买 nike

我们正在为 Android 构建一个游戏,它需要访问网络服务 - 所以我们用 PHP 编写了一个在我们自己的服务器上运行的 RESTful API。 API 提供的是:创建用户、登录、下载游戏、检索游戏列表、提交分数... 等等。现在我在想,如果一些有经验的用户获得 URL 格式 API - 他/她将能够以多种方式破坏系统:

  • 创建一个脚本并运行它来创建自动用户 - 我想我可以通过 CAPTCHA 或类似的方式阻止它。但同样,验证码会惹恼游戏玩家。
  • 恶意用户使用他的浏览器登录,下载游戏,然后按照他的意愿提交分数 - 所有这些都是通过在浏览器中键入 API 来调用 API。我假设恶意用户以某种方式知道要调用的 API url - 通过在应用程序发出 HTTP 请求时进行嗅探。
  • 我需要确保请求仅来自安装了游戏的 Android 设备。 (游戏将免费)

现在如何防止此类滥用行为?

最佳答案

我认为您将永远无法隐藏应用程序调用的 url(如果我运行的是 rooted android 手机,我应该能够监视所有网络流量)

但您真正的问题是您需要以某种方式验证您的 api。

一种方法是实现 OAUTH,但这可能有点过头了。

如果你想要一个简单的机制,这个怎么样;

  1. 创建 key
  2. 构建 api 请求(例如 https://my.example.com/users/23?fields=name,email)
  3. 散列此请求路径 + 加上您的 key (例如 md5(url+secret_key) == "a3c2fe167")
  4. 将此哈希添加到您的请求中(现在是 https://.....?fields=name,email&hash=a3c2fe167)
  5. 在 api 端,做同样的转换(去掉 hash 参数)
  6. 检查 url 的 md5 和 key

只要 secret 仍然保密,就没有人可以伪造您的请求。

示例(伪代码):

安卓端:

SECRET_KEY = "abc123"

def call_api_with_secret(url, params)
# create the hash to sign the request
hash = MD5.hash(SECRET_KEY, url, params)

# call the api with the added hash
call_api(url+"&hash=#{hash}", params)
end

服务器端:

SECRET_KEY = "abc123"

def receive_from_api(url, params)
# retrieve the hash
url_without_hash, received_hash = retrieve_and_remove_hash(url)

# check the hash
expected_hash = MD5.hash(SECRET_KEY, url_without_hash, params)

if (expected_hash != received_hash)
raise our exception!
end

# now do the usual stuff
end

关于php - 保护可从 Android 访问的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com