টি এল; ডিআর
জেএসএনপি হ'ল সুরক্ষা নিষেধাজ্ঞাকে বাইপাস করার জন্য উদ্ভাবিত একটি পুরানো কৌশল যা আমাদের আলাদা সার্ভারের (আলাদা উত্স * ) থেকে জেএসএন ডেটা পেতে নিষেধ করে ।
কৌতুকটি <script>
এমন ট্যাগ ব্যবহার করে কাজ করে যা সেই জায়গা থেকে জেএসএনকে জিজ্ঞাসা করে, যেমন :,{ "user":"Smith" }
তবে একটি কার্যক্রমে আবৃত প্রকৃত জেএসএনপি ("প্যাডিং সহ জেএসএন "):
peopleDataJSONP({"user":"Smith"})
এটি এই ফর্মটিতে গ্রহণ আমাদের peopleDataJSONP
ফাংশনের মধ্যে ডেটা ব্যবহার করতে সক্ষম করে । জেএসএনপি একটি খারাপ অভ্যাস , এটি ব্যবহার করবেন না (নীচে পড়ুন)
সমস্যাটি
বলুন আমরা নেভিগেট করছি ourweb.com
, এবং আমরা এর থেকে জেএসএন ডেটা (বা কোনও কাঁচা ডেটা) পেতে চাই anotherweb.com
। যদি আমরা জিইটি অনুরোধটি (যেমন XMLHttpRequest
, কোনও fetch
কল $.ajax
ইত্যাদি) ব্যবহার করতে পারি তবে আমাদের ব্রাউজারটি আমাদের বলবে যে এই কুরুচিপূর্ণ ত্রুটির সাথে এটি অনুমোদিত নয়:
আমরা কীভাবে ডেটা চাই? ঠিক আছে, <script>
ট্যাগগুলি এই পুরো সার্ভারের (মূল *) বিধিনিষেধের শিকার হয় না! এ কারণেই আমরা কোনও ত্রুটি ছাড়াই কোনও সার্ভার, যেমন সিডিএন থেকে jQuery বা গুগল ম্যাপের মতো লাইব্রেরি লোড করতে পারি।
গুরুত্বপূর্ণ বিষয় : আপনি যদি এটির বিষয়ে চিন্তা করেন তবে those লাইব্রেরিগুলি আসল, চলমানযোগ্য জেএস কোড (সাধারণত সমস্ত লজিকের অভ্যন্তরে একটি বিশাল ফাংশন)। কিন্তু কাঁচা ডাটা? JSON ডেটা কোড নয় । চালানোর মতো কিছুই নেই; এটি কেবল সরল তথ্য।
অতএব, আমাদের মূল্যবান ডেটা পরিচালনা বা পরিচালনা করার কোনও উপায় নেই। ব্রাউজারটি আমাদের <script>
ট্যাগ দ্বারা নির্দেশিত ডেটা ডাউনলোড করবে এবং এটি প্রক্রিয়া করার সময় সঠিকভাবে অভিযোগ করবে:
ডাব্লুটিএফ কি {"user":"Smith"}
আমরা এই বোমাটি বোঝাই? এটি কোড নয়। আমি গণনা করতে পারি না, সিনট্যাক্স ত্রুটি!
জেএসএনপি হ্যাক
সেই ডেটা ব্যবহারের পুরানো / হ্যাকি উপায়? এটি কিছু যুক্তি সহ প্রেরণ করার জন্য আমাদের সেই সার্ভারের প্রয়োজন, সুতরাং এটি লোড হওয়ার পরে, ব্রাউজারে আপনার কোডটি ডেটা ব্যবহার করতে সক্ষম হবে। সুতরাং বিদেশী সার্ভারটি একটি জেএস ফাংশনের অভ্যন্তরে আমাদের JSON ডেটা প্রেরণ করে। ডেটা নিজেই সেই ফাংশনের ইনপুট হিসাবে সেট আপ করা হয়। দেখে মনে হচ্ছে:
peopleDataJSONP({"user":"Smith"})
যা এটিকে জেএস কোড করে তোলে আমাদের ব্রাউজারটি অভিযোগ ছাড়াই পার্স করবে! ঠিক যেমন এটি jQuery লাইব্রেরির সাথে করে। এখন, এটির মতো পেতে, ক্লায়েন্টটি এটির জন্য JSONP- বান্ধব সার্ভারটি সাধারণত জিজ্ঞাসা করে:
<script src="https://anotherweb.com/api/data-from-people.json?myCallback=peopleDataJSONP"></script>
আমাদের ব্রাউজারটি সেই ফাংশনটির নাম সহ JSONP গ্রহণ করবে, সুতরাং আমাদের কোডে আমাদের একই নামের সাথে একটি ফাংশন প্রয়োজন:
const peopleDataJSONP = function(data){
alert(data.user); // "Smith"
}
বা এই মত, একই ফলাফল:
function peopleDataJSONP(data){
alert(data.user); // "Smith"
}
ব্রাউজারটি JSONP ডাউনলোড করবে এবং এটি চালাবে, যা আমাদের ফাংশনটিকে কল করে , যেখানে আর্গুমেন্টটি data
আমাদের JSON হবে। আমরা এখন যা চাই আমাদের ডেটা দিয়েই করতে পারি।
জেএসএনপি ব্যবহার করবেন না, কর্ন ব্যবহার করুন
জেএসএনপি হ'ল কয়েকটি ডাউনসাইড সহ একটি ক্রস-সাইট হ্যাক:
- আমরা কেবল জিইটি অনুরোধগুলি সম্পাদন করতে পারি
- যেহেতু এটি একটি জিইটি অনুরোধটি একটি সাধারণ স্ক্রিপ্ট ট্যাগ দ্বারা ট্রিগার করা হয়, তাই আমরা সহায়ক ত্রুটি বা অগ্রগতির তথ্য পাই না
- সুরক্ষা সংক্রান্ত কিছু উদ্বেগও রয়েছে যেমন আপনার ক্লায়েন্ট জেএস কোড চালানো যা দূষিত পেইডে পরিবর্তিত হতে পারে
- এটি কেবল JSON ডেটা দিয়েই সমস্যাটি সমাধান করে, তবে একই-উত্স সুরক্ষা নীতি অন্যান্য ডেটার ক্ষেত্রেও প্রযোজ্য (ওয়েবফন্টস, চিত্র / ভিডিও চিত্রের সাথে আঁকা ())
- এটি খুব মার্জিত বা পাঠযোগ্য নয়।
গ্রহণযোগ্যতাটি হ'ল আজকাল এটি ব্যবহার করার দরকার নেই ।
অন্য সার্ভার থেকে জেএসএন ডেটা পাওয়ার কৌশলটি জেএসএনপি, তবে আমাদের যদি অন্য ধরণের ক্রস-সাইট স্টাফের প্রয়োজন হয় তবে আমরা একই সুরক্ষা নীতি (সেম-অরিজিন) লঙ্ঘন করব।
আপনি এখানে CORS সম্পর্কে পড়া উচিত , কিন্তু এর সংক্ষিপ্তসারটি হ'ল:
ক্রস-অরিজিন রিসোর্স শেয়ারিং (সিওআরএস) এমন একটি প্রক্রিয়া যা অতিরিক্ত উত্স থেকে HTTP শিরোনাম ব্যবহার করে ব্রাউজারগুলিকে একটি উত্স অনুসারে চলমান একটি ওয়েব অ্যাপ্লিকেশন দিতে, আলাদা উত্স থেকে নির্বাচিত সংস্থাগুলিতে অ্যাক্সেস দেয়। একটি ওয়েব অ্যাপ্লিকেশন ক্রস-অরিজিন HTTP অনুরোধ কার্যকর করে যখন এটি এমন কোনও সংস্থার জন্য অনুরোধ করে যার নিজস্ব থেকে আলাদা উত্স (ডোমেন, প্রোটোকল বা পোর্ট) থাকে।
* উত্সটি 3 টি জিনিস দ্বারা সংজ্ঞায়িত করা হয়: প্রোটোকল , পোর্ট এবং হোস্ট । সুতরাং, উদাহরণস্বরূপ, (বিভিন্ন প্রোটোকল) এবং (পৃথক বন্দর) এবং স্পষ্টতই (পৃথক হোস্ট) এর থেকে https://web.com
আলাদা উত্সhttp://web.com
https://web.com:8081
https://thatotherweb.net