বর্তমান ডোমেন পান


140

আমার সার্ভারে আমার সাইট আছে

http://www.myserver.uk.com

এর জন্য আমার দুটি ডোমেন রয়েছে,

http://one.com

এবং

http://two.com

আমি পিএইচপি বর্তমান ডোমেনটি পেতে চাই তবে আমি যদি এটি ব্যবহার করি $_SERVER['HTTP_HOST']তবে এটি আমাকে দেখায়

myserver.uk.com

পরিবর্তে:

one.com or two.com

সার্ভারের নাম নয়, আমি কীভাবে ডোমেন পেতে পারি?

আমার পিএইচপি সংস্করণ 5.2 রয়েছে।


আপনি কেবল প্রাথমিক ইউআরএল পেতে পারেন। এই তিনজনের মধ্যে কোনটি প্রাথমিক?
কোড স্পাই

2
ঠিক কীভাবে আপনার দুটি ডোমেন আপনার সার্ভারে অনুরোধ জানায়?
xiaofeng.li

1
@ ইনফিজোএক্স সম্ভবত একটি ফ্রেম ...
কোডকাস্টার

প্রাথমিক হ'ল myserver.uk.com। তাহলে আমি কীভাবে বর্তমান ডোমেন নাম পেতে পারি? আমি যদি ঠিকানা ও ডটকমের সাহায্যে সাইটটি খুলি তবে আমি myserver.uk.com এর পরিবর্তে ওয়ান ডটকম পেতে চাই
টনি এভিগ্ট

@ টনিএভিঘট এটিই মূল বিষয় এবং আমি চেষ্টা করার চেষ্টা করছি, আপনি যে হোস্টটির সাথে সংযোগ করছেন তার নাম পাওয়া উচিত$_SERVER['HTTP_HOST'] । যদি সাইটগুলি one.comএবং two.com(i) ফ্রেম ব্যবহার করে "পুনর্নির্দেশ" করা হয়, তবে পৃষ্ঠাটি নিজেই এখনও myserver.uk.com থেকে আসে, সুতরাং আপনি আসল ডোমেনটি পাবেন না। এইচটিএমএল উত্স কিসের জন্য one.com?
কোডকাস্টার

উত্তর:


175

এটি ব্যবহার করার চেষ্টা করুন: $_SERVER['SERVER_NAME']

বা পার্স

$_SERVER['REQUEST_URI']

apache_request_headers ()


23
-1: এই উত্তরটি দিয়েই আমি জানি না যে আমি বিভিন্ন পরামর্শগুলি কীভাবে দেখছি exactly অবশ্যই, এটি আমার থেকে সন্ধান অবিরত করার জন্য একটি বিন্দু দেয়, তবে নিজেই এটি সত্যিই একটি ভাল উত্তর নয় ...
জ্যাস্পার

4
শুধু মুদ্রণ_আর (অ্যাপাচি_রেউকাস্ট_হেডারস ()) এবং আপনি সমস্ত বুঝতে পারবেন :)
একহালফ

2
@ সরহলিভিস HTTP_X_ORIGINAL_HOSTব্যবহারকারী দ্বারা পরিবর্তন করা যেতে পারে, এবং এটি বিশ্বাস করা যায় না। এটি সর্বদা সমস্যা নাও হতে পারে তবে সচেতন হওয়ার মতো বিষয় এটি।
wp-overwatch.com

64

সবচেয়ে ভাল ব্যবহার হবে

echo $_SERVER['HTTP_HOST'];

এবং এটি এর মতো ব্যবহার করা যেতে পারে:

if (strpos($_SERVER['HTTP_HOST'], 'banana.com') !== false) {
    echo "Yes this is indeed the banana.com domain";
}

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

<?php
    // Change banana.com to the domain you were looking for..
    $wordToHighlight = "banana.com";
    $serverVarHighlighted = str_replace( $wordToHighlight, '<span style=\'background-color:#883399; color: #FFFFFF;\'>'. $wordToHighlight .'</span>',  $_SERVER );
    echo "<pre>";
    print_r($serverVarHighlighted);
    echo "</pre>";
    exit();
?>

39

ব্যবহার করে $_SERVER['HTTP_HOST']আমাকে পায় (সাবডোমেন।) মাইন্ডোমাইন.এক্সটেনশন। এটি আমার কাছে সবচেয়ে সহজ সমাধান বলে মনে হচ্ছে।

যদি আপনি আসলে কোনও আইফ্রেমের মাধ্যমে 'পুনর্নির্দেশ' করেন তবে আপনি একটি জিইটি প্যারামিটার যুক্ত করতে পারেন যা ডোমেনটি জানিয়েছে।

<iframe src="myserver.uk.com?domain=one.com"/>

এবং তারপরে আপনি একটি সেশন ভেরিয়েবল সেট করতে পারেন যা আপনার অ্যাপ্লিকেশন জুড়ে এই ডেটা ধরে রাখে।


1
বেশিরভাগ গুরুত্বপূর্ণ এটির মধ্যে বন্দর নম্বর অন্তর্ভুক্ত থাকে যাতে এর পরে আমার আর এটির সাথে মিলিত হওয়ার দরকার নেই। বিএসডনুব্জ দ্বারা প্রস্তাবিত phpinfo আমাকে সঠিক সমাধান সন্ধান করতে সহায়তা করে।

30

এটি করার একমাত্র নিরাপদ উপায়

এই পৃষ্ঠাগুলির অন্যান্য সমস্ত উত্তরগুলির মধ্যে সুরক্ষা সম্পর্কিত প্রভাব রয়েছে যা সম্পর্কে আপনাকে সচেতন হওয়া দরকার।

বর্তমান ডোমেনটি পুনরুদ্ধারের একমাত্র গ্যারান্টিযুক্ত নিরাপদ পদ্ধতি হয় 𝓪 𝓼𝓮𝓬𝓾𝓻𝓮 𝓵𝓸𝓬𝓪𝓽𝓲𝓸𝓷 𝔂𝓸𝓾𝓻𝓼𝓮𝓵𝓯 𝓲𝓷 𝓲𝓽 𝓼𝓽𝓸𝓻𝓮।

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

+ + ------------------------------------------------- --- + ----------------------------------- +
 | ডোমেন সংরক্ষণের নিরাপদ পদ্ধতি | দ্বারা ব্যবহৃত |
+ + ------------------------------------------------- --- + ----------------------------------- +
 | একটি কনফিগার ফাইল | জুমলা, দ্রুপাল / সিমফনি |
 | ডাটাবেস | ওয়ার্ডপ্রেস |
 | পরিবেশগত পরিবর্তনশীল | লারাভেল |
 | একটি পরিষেবা রেজিস্ট্রি | কুবেরনেটস ডিএনএস |
+ + ------------------------------------------------- --- + + ----------------------------------- + +


আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন ... তবে তারা নিরাপত্তাহীন

হ্যাকাররা এই ভেরিয়েবলগুলিকে যে কোনও ডোমেইনই চায় আউটপুট তৈরি করতে পারে। এটি ক্যাশে বিষক্রিয়া এবং সবে লক্ষণীয় লক্ষণীয় ফিশিং আক্রমণ হতে পারে।

$_SERVER['HTTP_HOST']

এটি হ্যাকারদের দ্বারা ম্যানিপুলেশনের জন্য উন্মুক্ত অনুরোধ শিরোনামগুলির কাছ থেকে ডোমেন পান । একই সাথে:

$_SERVER['SERVER_NAME']

অ্যাপাচি সেটিং ইউজকোনোনিকাল নাম বন্ধ করা থাকলে এটিকে আরও ভাল করা যায়; যা কেস $_SERVER['SERVER_NAME']আর নির্বিচারে মান জনবহুল করার জন্য অনুমতি দেওয়া হবে না এবং নিরাপদ হতে হবে। এটি অবশ্য অ-ডিফল্ট এবং সেটআপের মতো সাধারণ নয়।


জনপ্রিয় সিস্টেমে

নীচের ফ্রেমওয়ার্ক / সিস্টেমে আপনি কীভাবে বর্তমান ডোমেনটি পেতে পারেন তা নীচে দেওয়া হল:

ওয়ার্ডপ্রেস

$urlparts = parse_url(home_url());
$domain = $urlparts['host'];

আপনি যদি ওয়ার্ডপ্রেসে কোনও ইউআরএল তৈরি করে থাকেন তবে কেবল হোম_আরল বা সাইট_আরল বা অন্য কোনও ইউআরএল ফাংশন ব্যবহার করুন

লারাভেল

request()->getHost()

request()->getHostফাংশন Symfony থেকে উত্তরাধিকারসূত্রে করা হয়, এবং নিরাপদ পর থেকে 2013 জন্য CVE-2013-4752 patched হয়।

Drupal এর

ইনস্টলার এখনও এই সুরক্ষিত করার বিষয়ে যত্ন নেন না ( সমস্যা # 2404259 ) 9 তবে ড্রুপাল 8-তে এমন নথি রয়েছে যা আপনি নিজের ড্রুপাল ইনস্টলেশনটি সুরক্ষিত করতে বিশ্বস্ত হোস্ট সেটিংসে অনুসরণ করতে পারেন যার পরে নিম্নলিখিতটি ব্যবহার করা যেতে পারে:

\Drupal::request()->getHost();

অন্যান্য ফ্রেমওয়ার্ক

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




অভিযোজ্য বস্তু

শোষণের উদাহরণ:

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

  2. হোস্ট শিরোনামের ভিত্তিতে আপনি যদি ডাটাবেসে লিঙ্কগুলি সঞ্চয় করেন তবে ফিশিং আক্রমণ হতে পারে। উদাহরণস্বরূপ, ধরুন যে আপনি কোনও ফোরামে কোনও ব্যবহারকারীর প্রোফাইলে পরম URL সংরক্ষণ করেন store ভুল শিরোলেখ ব্যবহার করে, একজন হ্যাকার যে কেউ তাদের প্রোফাইল লিঙ্কে ক্লিক করে তাকে ফিশিং সাইট প্রেরণ করতে পারে।

  3. পাসওয়ার্ড পুনরায় সেট করার বিষক্রিয়া ঘটতে পারে যদি কোনও হ্যাকার কোনও অন্য ব্যবহারকারীর জন্য পাসওয়ার্ড পুনরায় সেট করার ফর্মটি পূরণ করার সময় দূষিত হোস্ট শিরোনাম ব্যবহার করে। সেই ব্যবহারকারী তখন একটি ইমেল পাবে যা একটি পাসওয়ার্ড রিসেট লিঙ্কযুক্ত যা কোনও ফিশিং সাইটের দিকে নিয়ে যায়।

  4. এখানে আরও কিছু দূষিত উদাহরণ রয়েছে

অতিরিক্ত ক্যাভেট এবং নোট:

  • যখন ইউজকোনোনিকাল নামটি বন্ধ করা হয়$_SERVER['SERVER_NAME'] একই শিরোনাম দিয়ে$_SERVER['HTTP_HOST'] যাইহোক (প্লাস পোর্ট) ব্যবহার করা হত। এটি অ্যাপাচের ডিফল্ট সেটআপ। যদি আপনি বা ডিওপস এটি চালু করে থাকেন তবে আপনি ঠিক আছেন - ইশ - তবে কী আপনি একটি পৃথক দলের উপর নির্ভর করতে চান, বা ভবিষ্যতে নিজেকে তিন বছর ধরে রাখতে চান যা কোনও অল্পবয়স্ক কনফিগারেশন হিসাবে প্রদর্শিত হবে -ডিফল্ট মান? যদিও এটি জিনিসগুলিকে সুরক্ষিত করে, আমি এই সেটআপের উপর নির্ভর করার বিরুদ্ধে সাবধানতা অবলম্বন করব।
  • Redhat, তবে, ডিফল্ট [ উত্স অনুসারে ব্যবহারকেনোনিকাল চালু করে ] ।
  • যদি সার্ভারআলিয়াস ভার্চুয়াল হোস্ট এন্ট্রিতে ব্যবহৃত হয় এবং এলিয়াসড ডোমেনটির জন্য অনুরোধ করা হয়,$_SERVER['SERVER_NAME'] তবে বর্তমান ডোমেনটি ফিরিয়ে দেবে না, তবে সার্ভারনাম নির্দেশিকার মানটি ফিরিয়ে দেবে।
  • সার্ভারনামটি সমাধান করা না গেলে অপারেটিং সিস্টেমের হোস্টনেম কমান্ডটি তার জায়গায় ব্যবহার করা হয় [উত্স]
  • হোস্ট শিরোনামটি যদি বাদ যায় তবে সার্ভারটি এমন ব্যবহার করবে যেমন ইউজকোনোনিকাল [উত্স] এ রয়েছে
  • শেষ অবধি, আমি নিজের স্থানীয় সার্ভারে এটি ব্যবহারের চেষ্টা করেছি, এবং হোস্ট শিরোনামকে ফাঁকি দিতে ব্যর্থ হয়েছি। আমি নিশ্চিত নই যে আপাচে এর কোনও আপডেট রয়েছে যা এটিকে সম্বোধন করেছে, বা আমি যদি কিছু ভুল করছি। নির্বিশেষে, এই শিরোনামটি এখনও এমন পরিবেশে শোষণযোগ্য হবে যেখানে ভার্চুয়াল হোস্টগুলি ব্যবহৃত হচ্ছে না।

ছোট ভাড়া:

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




1
আপনি home_url এবং সাইট_আরএল এর মধ্যে পার্থক্যটি উল্লেখ করতে চাইতে পারেন। wordpress.stackexchange.com/a/50605/13
ভলমাইক

1
ওয়ার্ডপ্রেস ব্যবহারকারীদের জন্য +1। সাবডির ইনস্টল করা আছে কিনা তা পরীক্ষা করতে হবে তবে ভাল, তবে নোট করুন যে parse_url কী: $urlparts['path']ডোমেনের রুট ডিরেক্টরিতে ইনস্টল করা থাকলে সেট করা নেই। অন্যটি $urlparts['path']উপ-ডিরেক্টরিটি ফেরত দেয়।
জোনাস লন্ডম্যান

9

চেষ্টা $_SERVER['SERVER_NAME']

টিপস: একটি পিএইচপি ফাইল তৈরি করুন যা ফাংশনটিকে কল করে phpinfo()এবং "পিএইচপি পরিবর্তনশীল" বিভাগটি দেখুন। এখানে অনেকগুলি দরকারী ভেরিয়েবল রয়েছে যা আমরা কখনই ভাবি না।


আপনি সর্বদা _ _SSERVER- এ প্রিন্ট_আর-ইঙ্গিত করে অনুসন্ধান করতে পারেন

3

আমি জানি এটি পুরোপুরি বিষয়টিতে নাও থাকতে পারে, তবে আমার অভিজ্ঞতায় আমি চলক ইউআরএলটির ডাব্লুডাব্লুডাব্লু-নেসকে একটি ভেরিয়েবল উপযোগী করে সংরক্ষণ করি।

সম্পাদনা: এছাড়াও, দয়া করে নীচে আমার মন্তব্য দেখুন, এটি কী হচ্ছে তা দেখতে।

"Www" এর সাথে অজ্যাক্স কল প্রেরণ করা উচিত কিনা তা নির্ধারণ করার সময় এটি গুরুত্বপূর্ণ:

$.ajax("url" : "www.site.com/script.php", ...

$.ajax("url" : "site.com/script.php", ...

একটি অ্যাজাক্স কল প্রেরণের সময় ব্রাউজারের ঠিকানা বারের সাথে ডোমেনের নামটি অবশ্যই মেলানো উচিত, অন্যথায় আপনার কনসোলে আনকড সিকিউরিটিআরর থাকবে ।

সুতরাং আমি সমস্যাটি সমাধান করার জন্য এই সমাধানটি নিয়ে এসেছি:

<?php
    substr($_SERVER['SERVER_NAME'], 0, 3) == "www" ? $WWW = true : $WWW = false;

    if ($WWW) {
        /* We have www.example.com */
    } else {
        /* We have example.com */
    }
?>

তারপরে, $ ডাব্লুডাব্লুডাব্লু সত্য, বা মিথ্যা সঠিক অ্যাজাক্স কলটি চালায় কিনা তার উপর ভিত্তি করে।

আমি জানি এটি তুচ্ছ শোনায় তবে এটি এমন একটি সাধারণ সমস্যা যা সহজেই ভ্রমণ করা সহজ।


ওপি স্পষ্টভাবে ডোমেনের জন্য জিজ্ঞাসা করেছে, SERVER_NAME- কে নয়
সেবাস্তিয়ান জি মেরিনেসকু

সত্য, তবে এই দিনগুলিতে আপনাকে www ইস্যুটি সম্পর্কেও চিন্তিত হতে হবে।
ইনফিনিটস্ট্যাক

কেন? জেএসে আপনি দেখতে পারেন window.location। পিএইচপি-তে আপনি পেয়েছেন SERVER_NAME
সেবাস্তিয়ান জি মেরিনেসকু

4
"সাইট ডটকম" অ্যাড্রেস বারে প্রবেশ করার পরেও SERVER_NAME "www.site.com" প্রদান করে। আপনি যদি নিজের কোড জুড়ে SERVER_NAME ব্যবহার করছেন তবে অনিবার্যভাবে আপনি www / no-www সুরক্ষা ইস্যুতে ছুটে যাবেন, বিশেষত যখন অ্যাজাক্স কল করার কথা। তবে আপনার প্রশ্নের উত্তর দেওয়ার জন্য, উন্নত পিএইচপি প্রোগ্রামিংয়ে কখনও কখনও পিএইচপিকে গতিশীলভাবে কোড উত্পন্ন করতে হবে যা সার্ভারে একটি HTTP কল করে। যদি লক্ষ্য URLটিতে এমন কোনও পৃষ্ঠায় "www" থাকে তবে এটি সুরক্ষা ত্রুটি তৈরি করবে।
ইনফিনিটিস্ট্যাক

ঠিক আছে ... আমি এটি সম্পর্কে পড়েছি এবং আপনি ঠিক বলেছেন। সুতরাং আপনার উত্তর কারও পক্ষে প্রাসঙ্গিক হতে পারে। ভাল চাকরি :)
সেবাস্তিয়ান জি মেরিনেসকু

3

প্রত্যেকে parse_urlফাংশনটি ব্যবহার করছে তবে কখনও কখনও ব্যবহারকারী বিভিন্ন ফর্ম্যাটে আরগুমেটটি পাস করতে পারে।

এটি ঠিক করার জন্য, আমি ফাংশন তৈরি করেছি। এটা দেখ:

function fixDomainName($url='')
{
    $strToLower = strtolower(trim($url));
    $httpPregReplace = preg_replace('/^http:\/\//i', '', $strToLower);
    $httpsPregReplace = preg_replace('/^https:\/\//i', '', $httpPregReplace);
    $wwwPregReplace = preg_replace('/^www\./i', '', $httpsPregReplace);
    $explodeToArray = explode('/', $wwwPregReplace);
    $finalDomainName = trim($explodeToArray[0]);
    return $finalDomainName;
}

কেবল ইউআরএল পাস করুন এবং ডোমেন পান।

উদাহরণ স্বরূপ,

echo fixDomainName('https://stackoverflow.com');

ফলাফল হবে ফিরে আসবে

stackoverflow.com

এবং কিছু পরিস্থিতিতে:

echo fixDomainName('stackoverflow.com/questions/id/slug');

এবং এটিও ফিরে আসবে stackoverflow.com


1
$_SERVER['HTTP_HOST'] 

// ডোমেন পেতে

$protocol=strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https';
$domainLink=$protocol.'://'.$_SERVER['HTTP_HOST'];

প্রোটোকল সহ // ডোমেন

$url=$protocol.'://'.$_SERVER['HTTP_HOST'].'?'.$_SERVER['QUERY_STRING'];

// প্রোটোকল, ডোমেন, ক্যোরিস্ট্রিং মোট ** _S _SERVER হিসাবে ['SERVER_NAME'] মাল্টি ডোমেন হোস্টিংয়ের জন্য নির্ভরযোগ্য নয়!


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