اساتید ما یک api داریم میخوایم این وسط کسی از این اطلاعات استفاده نکنه.. مثلا رمزنگاری کنیم اطلاعات رو فقط مطمن شیم اسکریپت ما سمت کلاینت قابلیت خوندن رو داره.. سما کلاینت هم همون وب هست که با js اطلاعات رو میگیریم
اساتید ما یک api داریم میخوایم این وسط کسی از این اطلاعات استفاده نکنه.. مثلا رمزنگاری کنیم اطلاعات رو فقط مطمن شیم اسکریپت ما سمت کلاینت قابلیت خوندن رو داره.. سما کلاینت هم همون وب هست که با js اطلاعات رو میگیریم
کسی نیست
سلام
کافیه یک کلید ایجاد کنید و به اسکریپت هم اون کلید رو بدید
سمت سرور api هم در صورتی خروجی بده که اون کلید ارسال شده باشه
در صورتی که کلید وجود نداشته باشه api اجرا نشه و خطا بده
Contact Me >> Mobile : 09304443004 | Telegram ID : @miladworkshop | Email : info@miladworkshop.ir
دسترسی به api رو به ip یا دامنه محدود کنید
Contact Me >> Mobile : 09304443004 | Telegram ID : @miladworkshop | Email : info@miladworkshop.ir
باسلام، باید به عملگر های بیتی مسلط باشید، اگر فرض کنیم پاسخ وب سرویس شما در یک رشته باینری PHP ذخیره شده باشد، یک کلید حداقل 16 بایتی برای هر دفعه بسازید و از تابع های mcrypt و openssl استفاده و پاسخ وب سرویس را انکریپت کنید. خروجی کد شده را در یک متغیر ذخیره کنید اما توجه داشته باشید که این خروجی رشته نیست. سپس اگر کلید شما 16 بایت باشد، ما این متغیر را 128 بیت شیف چپ میدیم و در آخر برای ترکیب کلید، 128 بیت کلید را or می کنید با متغیری که خروجی انکریپت شده ی پاسخ وب سرویس در آن ذخیره شده است تا کلید و پاسخ وب سرویس با هم ترکیب شوند که شما اگر این این نتیجه آخر را هم بخواهید به Plaintext تبدیل کنید خواهید دید که قابل خواندن نیست.
برای بازگشت جواب هم، 128 بیت شیف راست می کنید و ماسک می گیرید، 16 بایت از سمت راست کلید شما خواهد بود که با استفاده از آن باقی دیتا را دیکریپت می کنید تا به پاسخ وب سرویس برسید، که در کل استفاده کردن از وب سرویس شما توسط یک برنامه نویس سطح متوسط سخت خواهد شد. با سشن هم همانطور که گفتم تا حدودی از وجود کاربر می توان مطمئن شد.
باسلام، در هر صورت اگر فرد کنجکاو باشد کاری از دست شما بر نخواهد آمد، پروتکلی هم برای اینکه تضمین کند کلاینت در صفحه مورد نظر توسط مرورگر خود از وب سرویس استفاد می کند وجود ندارد، اما راه هایی وجود دارد که زندگی را برای این فرد سختر کنید.
به طور مثال در هربار درخواست کاربر می توانید جواب را توسط یک کلید xor کنید سپس این کلید را به آخر جواب خود اضافه کنید سپس این دیتا را در قالب دیتا باینری به کاربر ارسال کنید، سمت کاربر با توجه به طول کلید، کلید را استخراج کرده و دیتا را دوباره xor کنید تا به دیتا اصلی برسید، همچنین اگر قرار است به طور مثال در صفحه mypage وب سرویس شروع به کار کند، در این صفحه یک سشن برای کاربر ایجاد کنید و در درخواست های بعدی از وجود سشن اطمینان حاصل کنید تا در حدی مطمئن شوید کاربر در صفحه مورد نظر از وب سرویس استفاده می کند.
عزیز شما میخوای کسی نتونه از اون api استفاده بکنه و بزاره مثلا داخل سایت خودش و کاربر هاش استفاده کنن ؟
اگر فقط یکبار در هر مراجعه api اطلاعات میده این کد به دردتون میخوره . اگر نه کد دوم که مخصوص api هست رو تغییر بدید که سشن رو پاک نکنه
کد اول هنگام لود صفحه ی مورد نظر ( تنها در همین صفحه اجرا شود و نه کل اسکریپت ( عدم همپوشانی با api به خاطر حذف نشدن سشن))
کد PHP:
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$api_sec = rand(500000, 5000000);
$_SESSION['api_sec'] = $api_sec;
setcookie("api_sec", $api_sec);
کد دوم برای فرانت . متغییر url رو به نام چیزی که هست برای api تغییر بدید
کد:function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } var url = 'api.php?api_sec='+getCookie('api_sec');
کد سوم مربوط به api
کد PHP:
if(!isset($_SESSION['api_sec']) || empty($_SESSION['api_sec']) || !isset($_GET['api_sec']) || $_GET['api_sec'] != $_SESSION['api_sec']){
die;
} else{
$_SESSION['api_sec'] = "";
}
ویرایش توسط hoka : December 13th, 2018 در ساعت 02:50
در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)