Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 移动到服务器API安全_Security_Api_Mobile_Titanium_Appcelerator - Fatal编程技术网

Security 移动到服务器API安全

Security 移动到服务器API安全,security,api,mobile,titanium,appcelerator,Security,Api,Mobile,Titanium,Appcelerator,我的任务是设计一个系统,让我们的用户也可以登录他们的帐户,并使用他们的手机与我们的服务进行交互。不过,我担心应用程序的安全性 基本上,我们允许人们使用Facebook或Twitter通过OAuth登录。移动应用程序(使用Appcelerator Tianium构建)也应该做到这一点。成功登录手机后,我需要通知我的应用程序有人使用FB或Twitter登录,以便我的应用程序可以检索用户的应用程序特定用户id 我的第一个想法是编写一个API,手机可以调用它来接受Facebook或twitter用户ID

我的任务是设计一个系统,让我们的用户也可以登录他们的帐户,并使用他们的手机与我们的服务进行交互。不过,我担心应用程序的安全性

基本上,我们允许人们使用Facebook或Twitter通过OAuth登录。移动应用程序(使用Appcelerator Tianium构建)也应该做到这一点。成功登录手机后,我需要通知我的应用程序有人使用FB或Twitter登录,以便我的应用程序可以检索用户的应用程序特定用户id

我的第一个想法是编写一个API,手机可以调用它来接受Facebook或twitter用户ID等参数。我会查询我的数据库,找到他们的内部用户id并将其返回到手机

这会很好,但它完全不安全。任何人都可以使用Facebook用户id访问同一个API,该API只会返回内部id(以及应用程序所需的任何其他数据),而不知道请求是否得到授权


这是我的第一个移动应用程序,因此我有点不确定在我的API上实现安全性的正确方法。

大多数API设置都包含某种类型的secretKey或APIKey,这是开发人员独有的。因为你是唯一的开发者,所以你可以在你的移动应用中设置一个密钥/散列,该密钥/散列也可以通过该密钥/散列成功返回数据

这是谷歌关于从头开始设计一个好的API的基调

也看看这个

  • 如果可以,请使用https,并解决许多问题
  • 成功登录后,您可以创建会话并将sessionid传递给客户端,我建议您 以RSA方式发送sessionid(如果有人可以嗅探您的sessionid)
  • 使用哈希签名来确保请求未在途中被修改,但此方法无法防止重新发布问题

  • 最后,对于您的问题,如果有新的进展,请让我知道,谢谢

    我也遇到过这个问题,验证用户非常简单,但验证设备要困难得多。正如您所说,任何人都可以连接到您的API,并向通过Facebook验证的用户展示您的API

    您可以通过相互SSL身份验证进行处理,但如果任何一个移动设备上的密钥被泄露,则整个API都会被泄露,因为所有设备都将使用安装应用程序时附带的同一密钥对

    我最后做的是,当应用程序第一次安装时,强制设备向我的API注册。该设备向我的服务器发出一个API调用,并获得一个API密钥机密,然后它必须使用该密钥进行所有其他API调用。这是不安全的,因为您可以编写一个脚本来注册自己并获取API密钥,但它确实允许我监视API使用情况并关闭性能不好的设备


    这是我能想到的最好的办法,一种锁定我在带外识别的未经授权设备的方法。

    我也有同样的问题,我通过创建自己的API(PHP)并结合代理服务器(NodeJS)解决了这个问题。来自我的客户机的每个请求都被发送到代理服务器,代理服务器验证该请求并将其传递给我的API。该API仅允许来自代理服务器his IP的请求

    首先,用户通过使用授权头与代理服务器进行身份验证,如果成功,用户将获得2个令牌。访问令牌和刷新令牌。在我的例子中,访问令牌用于发出请求并持续5分钟。当访问令牌过期时,用户可以使用永久存在的刷新令牌刷新令牌

    在应用程序中创建一个全局模块,用于处理密钥逻辑,将密钥存储在本地属性中,并在用户重新启动应用程序时使用这些密钥,这样就不必每次都重新登录

    如果您将其与HTTPS一起使用,则无法嗅探密钥,如果您反编译应用程序,则无法检索密钥,因为它们存储在用户设备上,而不是应用程序本身中的“硬编码”。从技术上讲,如果攻击者拥有用户的设备,他就能够反编译应用程序并检索密钥。我知道这一点,但如果他已经可以访问物理设备,他无论如何都可以使用任何应用程序

    代理服务器还记录每个传入的请求,并在有人尝试技巧时通过电子邮件通知我(这是我自己创建的)。我使用了以下模块:

    • 快车
    • https
    • http代理(将请求代理到我的API)
    • jsonwebtoken(生成并验证访问/刷新令牌)

    谢谢,但这没有多大帮助,问题不在于好的API设计。我担心的是,无法知道谁正在向我的API提交请求。手机会用一些请求参数点击API,但黑客也可以很容易地手工构造一个类似的请求。我怎样才能防止呢?只有当你不分发密钥时,它才有效。我不能将密钥放在客户端设备上,因为任何人都可以反编译应用程序或嗅探流量以公开密钥。那么它就不再是一个秘密了。@bh88:应用程序需要提交给服务器的任何信息都可以被反编译,所以无论应用程序能做什么,都可以被复制。我们遇到了同样的问题。您是否发现了这些评论中提出的问题的任何解决方案,也适用于此。密钥可以反编译。为什么这个答案被接受?你是如何处理的?我有完全相似的用例