আমি কীভাবে নিশ্চিত করতে পারি যে আমার জাভাস্ক্রিপ্ট ফাইলগুলি কোনও সিডিএন-এর মাধ্যমে বিতরণ করা হয়নি?


88

আমি এমন একটি দৃশ্যে কাজ করছি যেখানে কিছু জাভাস্ক্রিপ্ট ফাইল সিডিএন-তে হোস্ট করা হবে। আমি কিছু মেকানিজম রাখতে চাই যাতে এই ফাইলগুলি যখন ব্যবহারকারীদের পক্ষ থেকে ডাউনলোড করা হয়, তখন আমি নিশ্চিত করতে পারি যে ফাইলগুলি কোনওভাবে ছাপিয়ে যায়নি এবং প্রকৃতপক্ষে নির্দিষ্ট সিডিএন থেকে আসছে।

আমি বুঝতে পেরেছি যে আমি এসএসএল ব্যবহার করছি তবে টাস্কটি খুব সহজ, তবে তবুও, আমি নিশ্চিত করতে চাই যে এসএসএল ছাড়াই এইচটিটিপিতেও সঠিক ফাইলগুলি পরিবেশিত হয়েছে।

আমি যতদূর অনুসন্ধান করতে পারি, জাভাস্ক্রিপ্ট ফাইলগুলির জন্য ডিজিটাল স্বাক্ষরের মতো কোনও বিদ্যমান ব্যবস্থা নেই যা প্ল্যাটফর্ম জুড়ে সমর্থিত। সম্ভবত এটি প্রয়োজন হয় না?

জাভাস্ক্রিপ্ট ফাইলগুলির লেখককে যাচাই করতে ব্রাউজারগুলিতে কোনও পদ্ধতি অন্তর্নির্মিত আছে? নিরাপদ উপায়ে এটি করার জন্য আমি কি কিছু করতে পারি?


13
যদিও আমি এই প্রশ্নটি আকর্ষণীয় মনে করি, এটি কি অফ-টপিক নয়?
বিবর্তনবক্স

20
আপনি HTTP এ ফাইল পরিবেশন করবেন কেন?
njzk2

12
"তবে কেন এমন কোনও ব্যবস্থা নেই?" কারণ এটি সত্যিই কঠিন । আপনার ডেটা আপনার সার্ভারটি ছেড়ে যাওয়ার পরে, এটি টোস্ট। এইচটিটিপিএস সহায়তা করে তবে এটি যদি একটি সাধারণ এইচটিটিপি সংযোগ হয় তবে কোনও বৈধতা ব্যর্থ হতে পারে (বা বরং - পাস)। একটি এমআইটিএম আক্রমণ কেবল ব্রাউজারের প্রত্যাশাগুলির আধিপত্য পাওয়ার আগে আপনার প্রত্যাশিত স্বাক্ষর এবং / অথবা আপনি যা সরবরাহ করেছেন তার স্বাক্ষরটি কেবল পরিবর্তন করতে পারে। সুতরাং, যখন ব্যবহারকারী কিছু পেলোড পান এটি সম্পূর্ণরূপে নিরাপদ হিসাবে বিবেচিত হবে ... যখন এটি অগত্যা হয় না।
VLAZ

4
"তবে কেন এমন কোনও ব্যবস্থা নেই?" কারণ এইচটিটিপিএসে ইতিমধ্যে একটি সস্তা, কার্যকর এবং বিস্তৃত প্রয়োগযোগ্য সমাধান রয়েছে।
কেভিন ক্রামউইদে

9
এটি সম্ভবত সার্ভারফল্ট বা সুরক্ষা হওয়া উচিত, কারণ এটি ফাইলগুলি সুরক্ষিত উপায়ে পরিবেশনের বিষয়ে এবং প্রোগ্রামিংয়ের যে কোনও সম্পর্ক কেবলমাত্র স্পর্শকাতরভাবেই বলা যায় যে ফাইলগুলি উত্স কোড উপস্থাপন করে to
আন্ডারস্কোর_২

উত্তর:


140

প্রকৃতপক্ষে, এর মতো একটি বৈশিষ্ট্য বর্তমানে সাবসোর্স ইন্টিগ্রিটির নামে খসড়া করা হচ্ছেট্যাগটির বৈশিষ্ট্যটি দেখুন । integrity<script> বোর্ড জুড়ে এখনও পুরোপুরি গৃহীত হয়নি , এটি কেবল এই উদ্দেশ্যটি পূরণ করে।

integrity

ইনলাইন মেটাডেটা রয়েছে যা কোনও ব্যবহারকারী এজেন্ট অপ্রত্যাশিত ম্যানিপুলেশন ছাড়াই একটি ফেচড রিসোর্স বিতরণ করা হয়েছে তা যাচাই করতে ব্যবহার করতে পারে। সাবসোর্স ইন্টিগ্রিটি দেখুন।

উৎস

সাব্রোসোর্স ইন্টিগ্রিটি (এসআরআই) হ'ল একটি সুরক্ষা বৈশিষ্ট্য যা ব্রাউজারগুলি যাচাই করা ফাইলগুলি (উদাহরণস্বরূপ, সিডিএন থেকে) অপ্রত্যাশিত কারসাজি ছাড়াই সরবরাহ করা হয় তা যাচাই করতে সক্ষম করে। এটি আপনাকে একটি ক্রিপ্টোগ্রাফিক হ্যাশ সরবরাহ করার অনুমতি দিয়ে কাজ করে যা একটি আনীত ফাইলের অবশ্যই মিলবে।

উৎস


উদাহরণ:

<script src="https://example.com/example-framework.js"
    integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
    crossorigin="anonymous"></script>

তবে মনে রাখবেন যে আপনি যদি সরল এইচটিটিপি-র মাধ্যমে আপনার সংস্থানগুলি স্থানান্তর করেন তবে এটি মধ্য আক্রমণগুলিতে ম্যানের বিরুদ্ধে আপনাকে রক্ষা করবে না । এই ক্ষেত্রে, হামলাকারী দ্বারা হ্যাশ কোডটি ছদ্মবেশী হতে পারে, ম্যানিপুলেটেড স্ক্রিপ্ট ফাইলগুলি অকার্যকর বিরুদ্ধে প্রতিরক্ষা সরবরাহ করে।

এই কারণে, উপরে বর্ণিত সুরক্ষা ব্যবস্থা ছাড়াও আপনার সর্বদা প্লেইন HTTP এর পরিবর্তে সুরক্ষিত HTTPS সংযোগগুলি ব্যবহার করা উচিত।


9
আমি মনে করি এটি উল্লেখ করার মতো যে অখণ্ডতা চেকটি সহজেই ধরে নেওয়া যায় যে ওপেন তাদের এইচটিএমএল এবং সেইসাথে তাদের সম্পদ ফাইলগুলি প্রেরণের পরিকল্পনা করে। যদি তাদের সাইটটি এইচটিটিপিএস হয় এবং তারা এইচটিটিপি এর মাধ্যমে সম্পদ পরিবেশন করতে চায় তবে বেশিরভাগ ব্রাউজারগুলি এটিকে পছন্দ করে না এবং নিঃশব্দে এইচটিটিপি সম্পদ উপেক্ষা করে।
MonkeyZeus

4
@ মনকিজেস এটি কেবল সত্য হবে যদিও এমআইটিএম আক্রমণ হওয়ার ক্ষেত্রে বা যদি আমাদের নিজস্ব সার্ভার আপস করা হয়, সঠিক? আমার বোধগম্যতা হল যে প্রশ্নটি কীভাবে আপোষযুক্ত সিডিএন থেকে রক্ষা করতে পারে তা স্পষ্টভাবে জিজ্ঞাসা করে।
টিমো

10
@ টিমোস্টা ঠিক! এই চেকগুলি স্থানে না রেখে, উদাহরণস্বরূপ, যদি আপনি কোনও স্ক্রিপ্ট অন্তর্ভুক্ত করেন https://code.jquery.com/তবে যে কেউ আপস করেন code.jquery.comতা code.jquery.comএইচটিটিপিএস এর মাধ্যমে অ্যাক্সেস করা হচ্ছে কিনা তা নির্বিশেষে আপনার সাইট এক্সএসএস করতে পারে । এই চেকগুলি স্থানে রাখলে আক্রমণকারী কেবল স্ক্রিপ্টগুলি লোড হতে বাধা দিতে পারে, তাদের দূষিতগুলির সাথে প্রতিস্থাপন করবে না।
আজেদী 32

4
@ মনকিজেস আমি আপনার উদ্বেগগুলি উল্লেখ করে আমার উত্তরে একটি নোট যুক্ত করেছি। আপনি কি শব্দটির সাথে একমত?
টিমো

4
@ টিমোস্টা খুব সুন্দর, আমি এটি পছন্দ করি! বিটিডব্লিউ, আমি আমার প্রথম মন্তব্য পোস্ট করার আগেই আমি +1 করেছি :-)
MonkeyZeus

36

আপনি সাবসোর্স অখণ্ডতা পরীক্ষার সন্ধান করছেন।

উদাহরণস্বরূপ, এখানে jQuery সিডিএন স্নিপেট:

<script src="https://code.jquery.com/jquery-3.1.0.js"
        integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
        crossorigin="anonymous"></script>

4
সম্পূর্ণরূপে অকেজো কারণ একটি আক্রমণকারী আপনার ডাউনলোড করা স্ক্রিপ্টটি সংশোধন করার সাথে সাথে অখণ্ডতার ক্ষেত্রটিকে একই সময়ে সংশোধন করতে পারে।
অরবিটে

15
@ লাইটনেসেসেসিনআরবিট: আপনি যদি নিজের নিজস্ব ডোমেনটি এইচটিটিপিএসের মাধ্যমে অ্যাক্সেস করা থাকে তবে এটি নিয়ন্ত্রণ না করেন তা নয় code.jquery.com। এটি আপনাকে আপস থেকে রক্ষা করতে পারে code.jquery.com
সিলভারলাইটফক্স

4
@ সিলভারলাইটফক্স: ঠিক আছে, এমআইটিএম আক্রমণের বিরুদ্ধে সম্পূর্ণ অকেজো *
রেস

নিবন্ধন করুন এখনও খুব দরকারী এবং উদাহরণস্বরূপ: এই আক্রমণটি আটকাতে পারে: ব্লিপিং কম্পিউটার
অ্যাড্রিয়ান মউত

6

দাবি অস্বীকার: বরাবরের মতো, আপনাকে এই https ব্যবহার করার সময় কেবল এই ব্যবস্থাগুলিই কোনও কাজে আসল বিবেচনা করা উচিত, কারণ এগুলি সহজেই এইচটিএমপি দিয়ে এমআইটিএম এর মাধ্যমে অক্ষম করা যায় can

উপরের উত্তরগুলিতে প্রক্রিয়াটি ছাড়াও, আপনি প্যারেন্ট পৃষ্ঠায় সামগ্রী-সুরক্ষা নীতি HTTP প্রতিক্রিয়া শিরোনামও ব্যবহার করতে পারেন ।

http://www.html5rocks.com/en/tutorials/ সুরক্ষা / কনটেন্ট- সুরক্ষা- পুলিশ /

সামগ্রী-সুরক্ষা-নীতি: স্ক্রিপ্ট-এসআরসি 'sha256-qznLcsROx4GACP2dm0UCKCzCG-HiZ1guq6ZZDob_Tng ='

এখানে কয়েকটি বিষয় লক্ষণীয়। শা * - উপসর্গ হ্যাশ উত্পন্ন করতে ব্যবহৃত অ্যালগরিদম নির্দিষ্ট করে। উপরের উদাহরণে, sha256- ব্যবহার করা হয়েছে। সিএসপি sha384- এবং sha512- সমর্থন করে। হ্যাশ তৈরি করার সময় ট্যাগগুলি অন্তর্ভুক্ত করবেন না। নেতৃস্থানীয় এবং হোয়াইটস্পেস বিষয়বস্তু, শীর্ষস্থানীয় বা পিছনে হোয়াইটস্পেস সহ।

40 বা তার পরে ক্রোম ব্যবহার করে আপনি ডেভটুলগুলি খুলতে পারবেন এবং তারপরে আপনার পৃষ্ঠাটি পুনরায় লোড করুন। কনসোল ট্যাবটিতে আপনার প্রতিটি ইনলাইন স্ক্রিপ্টের জন্য সঠিক sha256 হ্যাশ সহ ত্রুটি বার্তা থাকবে।

এই প্রক্রিয়াটি বেশ কিছুদিন ধরেই রয়েছে, তাই ব্রাউজার সমর্থনটি সম্ভবত বেশ ভাল, কেবল যাচাই করতে ভুলবেন না।

অতিরিক্ত হিসাবে, আপনি যদি পুরনো নন-কমপ্লায়েন্ট ব্রাউজারগুলি সুরক্ষিত না হয়ে থাকে তা নিশ্চিত করতে চান, আপনি নীতির দ্বারা অনুমোদিত নয় এমন পৃষ্ঠার শীর্ষে একটি সিঙ্ক্রোনাস রিডাইরেক্ট স্ক্রিপ্ট অন্তর্ভুক্ত করতে পারেন।


বেশ কিছুদিন ধরেই ছিল, তবে ব্রাউজার সমর্থনটি খুব ভাল নয়। caniuse.com/subresource-integrity
Sp0T

@ স্প0 টি - সাবসোর্স অখণ্ডতা (আপনার লিঙ্কটি কী সম্পর্কিত) হ'ল অন্যান্য উত্তরের প্রক্রিয়া। আমার উত্তরটি বিষয়বস্তু সুরক্ষা নীতি সম্পর্কে, যার আরও ভাল সমর্থন রয়েছে
ফ্যাবিও বেলট্রামিনী

3

এই ধরণের স্বাক্ষর কী করতে পারে এবং কী করতে পারে না সে সম্পর্কে একটি গুরুত্বপূর্ণ বিষয় রয়েছে। এটি ব্যবহারকারীকে অনুমানমূলক আক্রমণ থেকে রক্ষা করতে পারে যাতে আপনার কোডটি কেউ পরিবর্তন করে। এটি আপনার সাইটে আশ্বাস দিতে পারে না যে আপনার কোডটি কোডটি কার্যকর করা হচ্ছে। অন্য কথায়, আপনি এখনও ক্লায়েন্টের কাছ থেকে আপনার সাইটে আসা কোনও কিছুতে বিশ্বাস করতে পারবেন না।


2

যদি আপনার প্রতিদ্বন্দ্বী মডেল কোনও আক্রমণকারীকে সিডিএন থেকে বিতরণ করার সাথে সাথে জাভাস্ক্রিপ্ট ফাইলগুলিকে সংশোধন করার অনুমতি দেয় তবে আপনার বিপরীতমুখী মডেল কোনও আক্রমণকারীকে রেফারিং উত্সটি সংশোধন করার অনুমতি দেয় কারণ এটি যাচাইকরণের কোনও প্রচেষ্টা অপসারণ করার জন্য সরবরাহ করা হয়, উত্সের ঠিকানা পরিবর্তনের পরিবর্তে অন্য কোনও উত্সকে পরিবর্তন করতে সিডিএন এবং / অথবা জাভাস্ক্রিপ্টের রেফারেন্স পুরোপুরি সরাতে।

এবং কীভাবে আপনার অ্যাপ্লিকেশনটি নির্ধারণ করতে পারে যে ব্যবহারকারীর রেজলভারটি এইচটিটিপি অনুরোধের মাধ্যমে সিডিএনকে সঠিকভাবে সমাধান করছে না (বা অন্য কোনও প্রক্রিয়া যাতে বিশ্বাসের সত্যায়িত শৃঙ্খলা নেই) কী কী তা খুলতে দেয় না।

/ ইত্যাদি / হোস্টগুলি:

#  ...
1.2.3.4    vile-pirates.org    trustworthy.cdn
#  ...

4
প্রথম বাক্যটি স্পষ্টত অসত্য। যদি রেফারিং পৃষ্ঠাটি HTTPS- র মাধ্যমে লোড করা হয় এবং জাভাস্ক্রিপ্ট ফাইলটি HTTP-not-S -র উপরে লোড হয়?
ব্যবহারকারী 253751

অথবা যদি সিডিএন নিজেই আপোস হয় তবে নিজের সার্ভার নয়?
আজেদি 32

@ মিমিবিস: আমি ধরে নেওয়ার সিদ্ধান্ত নিয়েছি যে ওপিকে এ জাতীয় দৃশ্যের প্রস্তাব দেওয়ার মতো যুক্তিযুক্ত নয়।
এরিক টাওয়ার্স

4
@ মিমিবিস তাই না কেন ব্রাউজারগুলি সাধারণত এইচটিটিপিএস পৃষ্ঠাগুলি এইচটিটিপি-র মাধ্যমে জেএস লোড করতে দেয় না?
বার্মার

4
@ মিমিবিস আমি বলছিলাম যে এটি এমন পরিস্থিতির উন্নতি করে যা এমনকি সম্ভব নয়, কারণ ব্রাউজারগুলি এটি অস্বীকার করে।
বার্মার 21

1

আপনি সাব্রোসোর্স ইন্টিগ্রিটির সাথে এটি নিশ্চিত করতে পারেন। অনেকগুলি সার্বজনীন সিডিএন সিডিএন ওয়েবসাইটে দেওয়া এম্বেডেবল কোডে এসআরআই হ্যাশগুলি অন্তর্ভুক্ত করে। উদাহরণস্বরূপ, পেজসিডিএন-তে, আপনি যখন jQuery সিডিএন পৃষ্ঠায় jquery ফাইলে ক্লিক করেন , আপনি URL টি অনুলিপি করতে বা স্ক্রিপ্ট ট্যাগটি ব্যবহার করতে পারেন যা নীচে SRI হ্যাশ রয়েছে:

<script src="https://pagecdn.io/lib/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>

পৃষ্ঠার লোডে, ব্রাউজারটি এই সংস্থানটির জন্য একটি অনুরোধ জারি করবে এবং অনুরোধটি শেষ হওয়ার সাথে সাথে এটি স্ক্রিপ্ট ট্যাগের অখণ্ডতা মান হিসাবে দেওয়া ফাইলের সাথে প্রাপ্ত ফাইলটির হ্যাশের সাথে মিলবে। যদি উভয় হ্যাশ মিলে না যায় তবে ব্রাউজার jquery ফাইলটি বাতিল করবে।

এই মুহূর্তে, এই বৈশিষ্ট্যটি বিশ্বব্যাপী 91% ব্রাউজার দ্বারা সমর্থিত। আরো বিস্তারিত caniuse

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.