REST API 请求应该是客户端还是服务器端?
REST API Request should be client side or server side?
举个例子:
有检查结果验证 API 并且有另一个 Web 应用程序使用 api 作为服务。根据 api 响应(如果成功)用户可以进入站点或不进入站点
要做到这一点,我的基础知识有问题,
我有两个选择(可能有很多 :) 任何好的都可以接受! )
01).调用API使用跨域AJAX请求并根据响应。向网络应用、服务器脚本发送另一个请求并创建一个会话
$.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 请求,而是将用户插入的结果发送到服务器端并使用服务器端脚本调用 API 使用 guzzle 库
$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
}
最好的方法是什么?安全性如何?我觉得第二个不错!但我还在想有没有办法在客户端做到这一点?
考虑使用 JWT:
实施您的解决方案
JSON Web 令牌 (JWT) 是一种紧凑的 URL 安全方式,用于表示要在两方之间转移的声明。 JWT 中的声明被编码为使用 JSON Web 签名 (JWS)
进行数字签名的 JSON 对象
我宁愿选择做服务器端,原因如下:
JavaScript 可以被用户操纵。 Ajax 请求可能有毒,因为 JS 代码中的错误更改试图达到安全漏洞。
在服务器端,您有更好的选项来记录特定用户发送的呼叫,并根据来自 API 的结果执行操作。也许有一天你需要根据你得到的结果进行昂贵的操作。
用户知道的越少越好。您的用户不需要知道您确切调用的是什么服务。至少他们不能知道 API 网址和您直接发送到 API 的数据(使用 developertools 或流量嗅探器可能会发生什么)
您无法保证可能的第三方 API 的安全,但您可以保证自己系统的安全。如果用户有可能使用发送的数据和确切的 URL 追踪您正在调用的 API,则用户可能会尝试攻击此 API。虽然您不知道 API 是否足够安全以抵御此类攻击,但您可以知道您的系统可以。如果发生攻击或安全漏洞,您还可以立即更新您的项目。您不能说这何时会在第三方项目中发生。我认为这是最重要的一点之一!
举个例子:
有检查结果验证 API 并且有另一个 Web 应用程序使用 api 作为服务。根据 api 响应(如果成功)用户可以进入站点或不进入站点
要做到这一点,我的基础知识有问题,
我有两个选择(可能有很多 :) 任何好的都可以接受! )
01).调用API使用跨域AJAX请求并根据响应。向网络应用、服务器脚本发送另一个请求并创建一个会话
$.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 请求,而是将用户插入的结果发送到服务器端并使用服务器端脚本调用 API 使用 guzzle 库
$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
}
最好的方法是什么?安全性如何?我觉得第二个不错!但我还在想有没有办法在客户端做到这一点?
考虑使用 JWT:
实施您的解决方案JSON Web 令牌 (JWT) 是一种紧凑的 URL 安全方式,用于表示要在两方之间转移的声明。 JWT 中的声明被编码为使用 JSON Web 签名 (JWS)
进行数字签名的 JSON 对象我宁愿选择做服务器端,原因如下:
JavaScript 可以被用户操纵。 Ajax 请求可能有毒,因为 JS 代码中的错误更改试图达到安全漏洞。
在服务器端,您有更好的选项来记录特定用户发送的呼叫,并根据来自 API 的结果执行操作。也许有一天你需要根据你得到的结果进行昂贵的操作。
用户知道的越少越好。您的用户不需要知道您确切调用的是什么服务。至少他们不能知道 API 网址和您直接发送到 API 的数据(使用 developertools 或流量嗅探器可能会发生什么)
您无法保证可能的第三方 API 的安全,但您可以保证自己系统的安全。如果用户有可能使用发送的数据和确切的 URL 追踪您正在调用的 API,则用户可能会尝试攻击此 API。虽然您不知道 API 是否足够安全以抵御此类攻击,但您可以知道您的系统可以。如果发生攻击或安全漏洞,您还可以立即更新您的项目。您不能说这何时会在第三方项目中发生。我认为这是最重要的一点之一!