REST API请求应该是客户端还是服务器端?

时间:2015-04-16 14:12:36

标签: php ajax api rest curl

作为一个例子:

有检查结果验证API,还有另一个使用api作为服务的Web应用程序。根据该api响应(如果成功)用户可以进入该网站

要做到这一点,我有基本问题,
我有两种选择(可能有很多:)接受任何好的选择! )

01)。使用跨域AJAX请求并根据响应调用API。向Web应用程序,服务器脚本发送另一个请求并创建会话

$.get("http://api.resultval.com/v1/",
   {index_no : no,subject : sub,grade : grade},function(response_msg){
       obj = JSON.parse(response_msg);
       if(obj.msg.valid){
       // results validated marked as validated result on user cv   
       }
   }
);

02)。而不是向API发送AJAX请求,而是将用户插入的结果发送到服务器端,并使用服务器端脚本使用 guzzle 库调用API

 $client = new \GuzzleHttp\Client();
            $response = $client->get('http://api.resultval.com/v1/'.Input::get('index_no').'/'.Input::get('subject').'/'.Input::get('grade'));
            if($response->json()['msg']==='verified'){
             // results validated marked as validated result on user cv   
            }

最好的方法是什么?如何安全?我认为第二个是好的!但是我还在考虑在客户端有一种方法吗?

2 个答案:

答案 0 :(得分:4)

由于以下原因,我宁愿选择执行此服务器端:

  1. 用户可以操纵JavaScript。 Ajax请求可能是有毒的,因为JS代码中的错误更改试图达到安全漏洞。

  2. 在ServerSide上,您有更好的选择来记录某个用户发送的调用,并根据API提供的结果执行操作。也许有一天你需要根据你得到的结果进行昂贵的操作。

  3. 用户知道的越多越好。您的用户无需知道您正在呼叫的服务。至少他们不知道API Urls和你直接发送给API的数据(使用developpertools或者流量嗅探器可以实现的)

  4. 您不能保证可能的第三方API的安全性,但您可以为自己的系统。如果用户可以跟踪您使用发送的数据调用的API以及用户可能尝试攻击此API的确切网址。虽然您不知道API是否足够安全以抵御此类攻击,但您可能知道您的系统确实存在。如果发生攻击或安全漏洞,您也可以立即更新您的项目。你不能说在第三方项目中何时会发生这种情况。我认为这是最值得思考的问题之一!

答案 1 :(得分:1)

考虑使用JWT实施您的解决方案:

JSON Web令牌(JWT)是一种紧凑的URL安全方式​​,用于表示要在双方之间转移的声明。 JWT中的声明被编码为JSON对象,使用JSON Web签名(JWS)进行数字签名