قسمت سوم : موارد امنیتی کار با Api اینستاگرام ( Secure Requests )

۲۴ آذر ، ۱۳۹۷

بیشتر Request های API دارای access_token می‌باشند و دولوپرهای مخرب می‌توانند با دستکاری و سوء‌استفاده از این توکن‌ها از طریق اپلیکیشن شما spam ایجاد کنند و یا اقدام به دزدی اطلاعات کنند اما اینستاگرام سیستمی را طراحی کرده تا به صورت اتوماتیک این موارد شناسایی شوند و آن توکن Disable Autorization بشود.

Disable Client-Side (Implicit) Authentication

دولوپرها بیشتر از روش Implicit OAuth Grant flow برای توسعه روی جاوا اسکریپت و یا اپلیکیشن‌های موبایل به دلیل راحتی از آن استفاده می‌کنند.

اگر اپلیکیشن شما از طریق Server Side توکن را دریافت می‌کند نیاز به این مراحل نمی‌باشد زیرا اطلاعات موقع ارسال از سرور به صورت رمزگذاری شده می‌باشد و برای دولوپرهای مخرب ناشناس می‌باشد. اگر شما از Server Side استفاده می‌کنید کافیست از قسمت تنظیمات تیک Disable implicit Oauth را بزنید در این‌صورت اینستاگرام اجازه استفاده از Client Side را به کسی نمی‌دهد.

 

Enforce Signed Requests

شما می‌توانید تلاش‌ها برای جعل هویت را با استفاده از Per request signature کاهش دهید و امنیت اپلیکیشنتان را بالا ببرید. برای این کار در قسمت Edit Oauth Client Configuration گزینه Enforce signed requests را فعال کنید.

وقتی این گزینه را فعال می‌کنید اینستاگرام در هر Request دنبال پارامتر sig می‌گردد و آن را با قطعه کد Hash شده‌ای که از طرف Client Secret می‌آید مطابقت می‌دهد. معمولا از متد HMAC با SHA256 استفاده می‌کند.

Signature format


Token to sign: endpoint|key1=value1|key2=value2|…
Parameter name: sig
Parameter value: signed token with your Client Secret using the SHA256 hash algorithm

Examples


Endpoint: /users/self Parameters: access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d App Secret: 6dc1787668c64c939929c17683d7cb74

With this example, the signature key/value should be:
sig=cbf5a1f41db44412506cb6563a3218b50f45a710c7a8a65a3e9b18315bb338bf

Endpoint: /media/657988443280050001_25025320 Parameters: access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&count=10 App Secret: 6dc1787668c64c939929c17683d7cb74
Here the signature key/value would then be:
sig=260634b241a6cfef5e4644c205fb30246ff637591142781b86e2075faf1b163a


Signature یک کد هگز RFC 2104 سازگار با HMAC با الگوریتمSHA256 را بیان می‌کند.
کد آن در php به صورت زیر می‌باشد:


 function generate_sig($endpoint, $params, $secret) { 
$sig = $endpoint;
ksort($params);
foreach ($params as $key => $val) { 
$sig .= "|$key=$val";
 } 
return hash_hmac('sha256', $sig, $secret, false); 
}  
$endpoint = '/media/657988443280050001_25025320'; 
$params = array( 
'access_token' => 'fb2e77d.47a0479900504cb3ab4a1f626d174d2d',
'count' => 10,
 ); 
$secret = '6dc1787668c64c939929c17683d7cb74';
 $sig = generate_sig($endpoint, $params, $secret);
echo $sig;


Testing Signed Requests


استفاده نادرست از signature می‌تواند باعث call کردن اشتباه api شده و موجب مشکل شود برای همین باید بتوانیم آن را تست کنیم از طریق cURL آن را تست می‌کنیم.


curl \
    -X POST \
     -F 'access_token=' \ 
     -F 'sig=' \
     https://api.instagram.com/v1/media/657988443280050001_25025320/likes


جواب‌های احتمالی:‌


Success
{"meta":{"code":200},"data":null}
Signature is required
{"code": 403, "error_type": "OAuthForbiddenException", "error_message": "Missing required parameter 'sig'"}
Failed to validate signature
{"code": 403, "error_type": "OAuthForbiddenException", "error_message": "Signature does not match"}

میانگین آرا:
95% (4 نفر)
رای دهید:
مقالات مرتبط
مشاهده بیشتر...