স্থানীয় হোস্ট যদি সংযোগের সাথে জাভাস্ক্রিপ্ট চেক করবেন?


108

পৃষ্ঠাটি লোডিংটি আমার স্থানীয় মেশিনে থাকলে আমি আমার জাভাস্ক্রিপ্টটিতে একটি চেক রাখতে চাই।

যে কারণটি আমি এটি করতে চাই তা হ'ল আমি যখন বিকাশ করি তখন আমি নিশ্চিত করতে চাই যে আমার সার্ভারের উভয় দিক (সি #) যাচাইকরণ সঠিকভাবে কাজ করছে। সুতরাং আমি উভয় ক্লায়েন্ট পক্ষ এবং সার্ভার পক্ষের ত্রুটি দেখাতে দেখতে চাই।

সুতরাং আমি পরীক্ষার সময় আমার jquery বৈধতাযুক্ত স্টাফের মধ্যে আমার কাছে একটি পতাকা রয়েছে যা কেবল সর্বদা অবৈধ ডেটা দিয়ে যেতে দেয়। এইভাবে আমি ক্লায়েন্টের পাশ এবং সার্ভারের ত্রুটিগুলি একবারে দেখতে পাচ্ছি।

তবে এখনই আমাকে ম্যানুয়ালি যেতে হবে এবং বিকাশ থেকে উত্পাদনে যাওয়ার সময় পিছনে পিছনে যেতে হবে।


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

উত্তর:


217

location.hostnameপরিবর্তনশীল আপনি বর্তমান হোস্ট দেয়। আপনি কোন পরিবেশে রয়েছেন তা নির্ধারণ করার জন্য এটি আপনার পক্ষে যথেষ্ট।

if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
    alert("It's a local server!");

14
127.0.0.1 ইত্যাদি ব্যবহারের ক্ষেত্রেও কি আরও সাধারণ / "ক্যাচ-অল" সমাধান নেই?
জ্যাকোবাক

8
এটা ঠিক ভুল। অনেক লোক তাদের হোস্ট ফাইলটি সম্পাদনা করে যাতে 'লোকালহোস্ট' শব্দটি পাওয়া যায় না
vsync

4
আমি রাজী. এটা ভুল. নেটওয়ার্ক ড্রাইভের মাধ্যমে "স্থানীয়" ফাইল অ্যাক্সেস করার সময়ও কাজ করবে না।
সমস্যাগুলি

4
@ ফাইল ইন্টারফেসের মাধ্যমে সুমিত আপনি হোস্টনামটি খালি আছে তা পরীক্ষা করতে পারবেন
chacham15

4
উহ নিশ্চিত নন কেন প্রত্যেকে একে ভুল হিসাবে উল্লেখ করছে। এই সরল স্নিপড লোকালহোস্ট এবং উত্পাদনে আমার জন্য নিখুঁত কাজ করে। আমার সফ্টওয়্যারটি বিজ্ঞাপনের পরিবেশন করতে আবহাওয়া জানে - না 1 কোডের সহজ লাইনের সাথে। ধন্যবাদ ওপি।
অ্যান্ডি

32

যদি ব্রাউজারে স্থির এইচটিএমএল চালু করা হয়, যেমন file:///C:/Documents and Settings/Administrator/Desktop/"লোকালহোস্ট" সনাক্ত করার মতো অবস্থান থেকে কাজ করবে না। location.hostnameখালি স্ট্রিং ফিরে আসবে। তাই

if (location.hostname === "localhost" || location.hostname === "127.0.0.1" || location.hostname === "")
    alert("It's a local server!");

আমি এই সঠিক সমস্যার মধ্যে দৌড়েছি এবং আমি নিজেই সমাধানটি অনুধাবন করার সময়, এই উত্তরটি এখনও আরও বেশি হওয়া উচিত।
ডমসন

7

তবুও সমস্ত ধরা পড়েনি তবে এটি হতে পারে কিছুটা উন্নতি। আপনি এখন ডোমেনগুলির একটি অ্যারে তৈরি করতে পারেন এবং অন্তর্ভুক্ত করতে পারেন

const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...];

if (LOCAL_DOMAINS.includes(window.location.hostname))
  alert("It's a local server!");

5

এটি কীভাবে প্রতিক্রিয়াতে পরীক্ষা করা যায় , পরিষেবা কর্মী নিবন্ধন করুন, লোকালহোস্ট এবং আইপিভি 6 সহ হোস্ট- নেম চেক করে আপনি লোকালহোস্টে আছেন কিনা তা যাচাই করার ভাল উপায় এবং 127 এর সাথে ম্যাচিং শুরু :

const isLocalhost = Boolean(
    window.location.hostname === 'localhost' ||
    // [::1] is the IPv6 localhost address.
    window.location.hostname === '[::1]' ||
    // 127.0.0.1/8 is considered localhost for IPv4.
    window.location.hostname.match(
        /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
    )
);

3

অন্যান্য স্ক্রিপ্টগুলির মতো একই যান্ত্রিক ব্যবহার করে সবচেয়ে স্বল্পতম ফর্ম:

if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
     console.log("It's local host !");
}

3

এই এক এছাড়াও কিছু সাধারণ ক্ষেত্রে যেখানে স্থানীয় নেটওয়ার্ক আইপিগুলি দিয়ে শুরু জুড়ে 10.0.বা 192.168.বা রিসিভ ডোমেনে বিভক্তি মত .local:

export function isLocalNetwork(hostname = window.location.hostname) {
  return (
    (['localhost', '127.0.0.1', '', '::1'].includes(hostname))
    || (hostname.startsWith('192.168.'))
    || (hostname.startsWith('10.0.'))
    || (hostname.endsWith('.local'))
  )
}

2

এটির একটি সহজ উপায় হ'ল লোকালহস্টের বিরুদ্ধে হোস্টনামটি পরীক্ষা করা বা আপনার কাস্টম ডোমেন নামটি একটি স্ট্রিংয়ের বিপরীতে পরীক্ষা করা, এই ক্ষেত্রে ".local" url, যেমন http: //testsite.local

var myUrlPattern = '.local';
if (window.location.hostname === "localhost" || location.hostname === "127.0.0.1" || window.location.hostname.indexOf(myUrlPattern) >= 0) {
    alert("It's a local server!");
}

1

পৃষ্ঠাগুলির পিছনে আপনার কোডের একটিতে সি # এর সাহায্যে সনাক্ত করতে পারেন:

if ((Request.Url.Host.ToLower() == "localhost"))
{
    // ..., maybe set an asp:Literal value that's in the js
}

অথবা আপনি যদি ক্লায়েন্ট স্ক্রিপ্ট থেকে এটি করতে চান, আপনি উইন্ডো.লোকেশন.হোস্টের মান পরীক্ষা করতে পারেন।

if (window.location.host == "localhost")
{
    // Do whatever
}

আশাকরি এটা সাহায্য করবে.


4
লোকেশনহোস্টে হোস্টনাম এবং পোর্ট অন্তর্ভুক্ত রয়েছে। পরিবর্তে location.hostname ব্যবহার করুন।
pmont

1
const LOCAL_DOMAINS = [ "localhost", "127.0.0.1" ];

/* offline || development */
if ( LOCAL_DOMAINS.includes(location.hostname) )
{
    BASE_URL_PUBLIC = location.hostname + "/folder/website/"; // your project folder
}

/* online || production */
else
{
    BASE_URL_PUBLIC = location.hostname;
}

0

উপরের উত্তরগুলি বেশিরভাগই সমস্যার সমাধান করে তবে ...

  • লোকালহোস্ট অগত্যা 'লোকালহোস্ট /' না হলে কী হবে?
  • আপনি যদি উন্নয়নের সময় এফই বৈধতা করতে চান?
  • আপনি যদি দেবের সময় বিভিন্ন আচরণ চান
    ( ফে বৈধকরণ, বৈধতা যাচাই করুন, কোনও বৈধতা নেই )

একটি সমাধান হল অবস্থানের হ্যাশ সেট করে এটি পরীক্ষা করা।

http://myname.foo.com/for.html# দেববিলিশন

আপনি একটি স্যুইচ সহ সীমাহীন বিকল্প যুক্ত করতে পারেন

switch(location.hash) {}
    case '#devValidation':
        // log the results and post the form
        break;
    case '#beValidation':
        // skip front end validation entirely
        break;
    case '#noValidation':
        // skip all validation $('[name=validationType']).val('novalidation');
        break;
    case '#feValidation':
    default:
        // do fe validation
        break;
}

এই সমাধানটিতে এখনও কিছু ম্যানুয়াল কাজ রয়েছে এবং এটির সাথে হস্তক্ষেপ করা যেতে পারে।
আরপুন

আমি মনে করি "ম্যানুয়াল ওয়ার্ক" তুচ্ছ, হৈচৈ করাও যেহেতু আমরা জাভাস্ক্রিপ্টের অনুমোদন ছাড়াই আমাদের যা কিছু জমা দিতে পারি এবং বেশিরভাগ ফ্রেমওয়ার্কগুলিতে ফিল্টার রয়েছে যা অনুরোধটি অ্যাপ্লিকেশনটিতে পৌঁছানোর আগেই আক্রমণগুলি প্রশমিত করে। সার্ভারের পার্শ্বের বৈধতা ওপিকে ছাড়তে ওপিকে অনুমতি দেওয়া ঝুঁকিপূর্ণ, তবে এটি কেবল হ্যাশের কোনও কী ব্যবহারের উপযোগিতা দেখানোর জন্য যুক্ত করা হয়েছিল।
শানিমাল

আমি লোকালহোস্ট বা লুপব্যাকটি কখনই ব্যবহার করি না কারণ কয়েক ডজন আন্তর্জাতিক ক্লায়েন্ট (ক্লিনেটএ ডটকম, ক্লায়েন্টএ.ডি, ক্লায়েন্টবি ডটকম, ক্লায়েন্টবি.উ, ইত্যাদি ...) হোয়াইটলিস্ট করা খুব দ্রুত একটি দুঃস্বপ্ন হয়ে উঠবে। আমি এই সমাধানটি অফার করার সিদ্ধান্ত নিয়েছি কারণ এটি ডোমেনটির বিষয়ে চিন্তা করে না এবং প্যাচ ছাড়াই লাইভ সাইটে চেক করা যায়।
শানিমাল

0

নিয়মিত প্রকাশটি ধীর * তবে স্বল্প এবং ঝরঝরে। এছাড়াও, এখানে কেউ আইপিভি 6 লোকালহোস্টের জন্য পরীক্ষা করে না (:: 1)

/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)

এটি সাধারণ লোকালহোস্ট, .local ডোমেন এবং ফাইলের জন্য পরীক্ষা করে: (খালি হোস্টনেম)।

*) ক্রোমে, পারফরম্যান্স [].includes(...)সেরা (৪২ এমএস), তারপরে অ্যারে আইটেম চেকিং (১১৯ এমএস), তারপরে [].indexOf(...) > -1(২৮৯ এমএস) এবং অবশেষে রেজিএক্সপ্যাক (৫66 এমএস) সহ সাধারণ লুপ (পরে, যখন) থাকে। তবে এই পরিমাপগুলি কোনওভাবে আপেক্ষিক, কারণ বিভিন্ন ব্রাউজারগুলি আলাদাভাবে অনুকূলিত হয়। এফএফ 52 ইএসআর এ includesএবং indexOfএকই রকম ফলাফল রয়েছে, রেজিপ্সপ 2 × ধীর এবং লুপ 6 × ধীর।


0

উপরের মতামতের উপর ভিত্তি করে নিম্নলিখিত নিয়মিত প্রকাশ আমাকে ইউআরএল 'লোকালহোস্ট', কোনও আইপি অ্যাড্রেস আইপিভি 4 বা আইপিভি 6 কিনা তা যাচাই করতে সহায়তা করেছে has

window.location.hostname.match(/localhost|[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}|::1|\.local|^$/gi)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.