我想知道我该怎么做,只有使用本机react开发的android应用程序才能访问我的API节点js。因此,只能使用简单的域白名单从我的网站和应用访问我的服务器
答案 0 :(得分:1)
没有办法保证这一点。客户端控制客户端发生的所有事情。如果应用程序包含防止客户端干扰的保护机制,则可以对其进行反向工程。
一种防止未授权客户端连接到后端的方法是使用API密钥发出后端请求,该请求以加密(散列)字符串的形式传输并在服务器端进行验证。滥用的API密钥需要列入黑名单。
由于可以从API请求中提取哈希密钥,因此使哈希密钥变得更复杂的方法是使哈希API密钥依赖于特定请求,例如:
fetchData(url + '&api_key_hash=' + md5(SALT + url + SECRET_API_KEY))
api_key_hash
仍然可以在服务器端进行验证,但是对于想要未经授权访问后端API的客户端来说是没有用的。客户的唯一方法是获取SECRET_API_KEY
。
由于可以对客户端应用程序进行反向工程以获取未加密的API密钥,因此使反向工程更加复杂的一种方法是不将密钥存储为纯字符串并混淆应用程序。
请注意,尽管这些措施不能保证不会对应用程序进行逆向工程以提取API密钥,但混淆可能会使应用程序开发人员的工作复杂化,例如调试和分析崩溃报告。据我所知,React Native应用程序的逆向工程是不重要的,除了JS模糊处理之外,它没有任何保护作用。