【问题标题】:how to prevent native clients from accessing our api如何防止本地客户端访问我们的 api
【发布时间】:2018-03-13 10:08:08
【问题描述】:

我们有一个 PHP REST API 和一个 angularjs 客户端。

我们没有也不会有任何本地客户端,只有浏览器。

攻击者创建了一个虚假网站,使用虚假账户进行所有付款,我们的目标是防止这种情况发生。

现在我们找到了一种方法来阻止网站服务器访问我们的 API,并且浏览器无法发出跨域请求,但没有什么能阻止攻击者制作访问我们 API 的桌面应用程序。

如何检测客户端是浏览器而不是原生客户端?

PS

我知道浏览器可以嵌入到桌面应用程序中,现在我可以接受,只是不是纯原生客户端。

【问题讨论】:

  • 你不能:浏览器是本地客户端。
  • 我认为您的问题在于前端和后端代码之间的功能分离。如果安全相关的功能都在服务器端,你为什么要关心攻击者会创建一个桌面应用程序供你的用户使用?他只能控制前端。您还可以警告您的用户不要使用他的恶意软件,以防止他们受到伤害。

标签: php security man-in-the-middle


【解决方案1】:

实现此结果的唯一方法是使用 Javascript 执行 challenge-response 机制,因此“本机客户端”必须解析和评估结果,如果不嵌入浏览器或 Javascript V8 引擎,这是很困难的。

只需通过 PHP 在 JavaScript 中打印一个令牌,然后 JS 就必须进行加密计算。多态性越多,没有嵌入式浏览器就很难实现自动化机器人。

但是,您无法使用 google 的 V8 引擎之类的 JavaScript 解释器停止原生应用程序(体积庞大但速度非常快)

【讨论】:

  • 我不明白你的回答
  • 所以...您的 PHP 应该生成一个令牌并将其放入 JavaScript 中以呼应它。然后 JS 代码在浏览器中运行时必须对令牌进行一些计算并生成一个响应,PHP 可以在 API 请求完成时将其标记为有效。这种计算不应该是简单的静态散列,因为本地客户端可以在不运行 JS 代码的情况下重现它。相反,它应该是非常动态的。这不是一件容易的事,所以你真的需要它吗?
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 2020-02-20
  • 2011-09-07
  • 2016-12-19
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多