$_SERVER['HTTP_HOST']ফর্ম ব্যবহার করার পরেও, এক্সএসএস আক্রমণ সম্পর্কে চিন্তা না করে কোনও সাইটে সমস্ত লিঙ্ক ব্যবহার করা কি "নিরাপদ" ?
হ্যাঁ, এটি ব্যবহার করা নিরাপদ$_SERVER['HTTP_HOST'] , (এবং এমনকি $_GETএবং $_POST) দীর্ঘ আপনি তাদের যাচাই হিসাবে হিসাবে তাদের স্বীকার করার আগে। সুরক্ষিত উত্পাদন সার্ভারগুলির জন্য এটি আমি করি:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
$reject_request = true;
if(array_key_exists('HTTP_HOST', $_SERVER)){
$host_name = $_SERVER['HTTP_HOST'];
// [ need to cater for `host:port` since some "buggy" SAPI(s) have been known to return the port too, see http://goo.gl/bFrbCO
$strpos = strpos($host_name, ':');
if($strpos !== false){
$host_name = substr($host_name, $strpos);
}
// ]
// [ for dynamic verification, replace this chunk with db/file/curl queries
$reject_request = !array_key_exists($host_name, array(
'a.com' => null,
'a.a.com' => null,
'b.com' => null,
'b.b.com' => null
));
// ]
}
if($reject_request){
// log errors
// display errors (optional)
exit;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
echo 'Hello World!';
// ...
এর সুবিধাটি $_SERVER['HTTP_HOST']হ'ল এর আচরণটি তুলনায় আরও বেশি সংজ্ঞায়িত$_SERVER['SERVER_NAME'] । তুলনা ➫➫ :
হোস্টের বিষয়বস্তু: বর্তমান অনুরোধ থেকে শিরোনাম, যদি সেখানে থাকে।
সঙ্গে:
বর্তমান স্ক্রিপ্টটি চালাচ্ছে এমন সার্ভার হোস্টের নাম।
আরও ভাল সংজ্ঞায়িত ইন্টারফেস ব্যবহার করার $_SERVER['HTTP_HOST']অর্থ আরও বেশি এসএপিআই নির্ভরযোগ্য সু-সংজ্ঞায়িত আচরণ ব্যবহার করে এটি বাস্তবায়ন করবে । (ভিন্ন অন্যান্য ।) যাইহোক, এটা এখনও সম্পূর্ণভাবে SAPI নির্ভরশীল ➫➫ :
এখানে কোনও গ্যারান্টি নেই যে প্রতিটি ওয়েব সার্ভার এগুলির [ $_SERVERএনট্রি] কোনও সরবরাহ করবে ; সার্ভারগুলি কিছু বাদ দিতে পারে বা অন্যকে এখানে তালিকাভুক্ত নয় provide
হোস্টের নামটি কীভাবে পুনরুদ্ধার করবেন তা বোঝার জন্য, প্রথম এবং সর্বাগ্রে আপনার বুঝতে হবে যে যে সার্ভারটিতে কেবল কোড রয়েছে তার নেটওয়ার্কে নিজের নাম জানার (যাচাই করার প্রাক-প্রয়োজনীয়তা) কোনও উপায় নেই । এটিকে এমন একটি উপাদান দিয়ে ইন্টারফেস করা দরকার যা এটির নিজের নাম সরবরাহ করে। এটি এর মাধ্যমে করা যেতে পারে:
সাধারণত এটি স্থানীয় (SAPI) কনফিগার ফাইলের মাধ্যমে সম্পন্ন হয়। মনে রাখবেন আপনি এটিকে সঠিকভাবে কনফিগার করেছেন, যেমন অ্যাপাচি ➫➫ ➫➫ :
গতিশীল ভার্চুয়াল হোস্টটিকে সাধারণের মতো দেখতে কিছু জিনিস 'নকল' হওয়া দরকার।
সর্বাধিক গুরুত্বপূর্ণ হ'ল সার্ভারের নাম যা আপাচি দ্বারা স্ব-রেফারেন্সিয়াল ইউআরএল তৈরি করতে ব্যবহৃত হয়, ইত্যাদি এটি কনফিগার করা আছে ServerName নির্দেশের এবং এটি সিজিআই-র মাধ্যমে উপলব্ধ isSERVER_NAME পরিবেশ পরিবর্তনশীলের ।
রান সময় ব্যবহৃত প্রকৃত মান ইউজকনোনিক্যালনাম সেটিং দ্বারা নিয়ন্ত্রিত হয় ।
UseCanonicalName Offসার্ভারের সাথেHost: অনুরোধের শিরোনামের সামগ্রীগুলি থেকে নাম আসে name এটির সাথে UseCanonicalName DNS ভার্চুয়াল হোস্টের আইপি ঠিকানার বিপরীত ডিএনএস লুকআপ আসে। পূর্ববর্তী সেটিংসটি নাম ভিত্তিক গতিশীল ভার্চুয়াল হোস্টিংয়ের জন্য ব্যবহৃত হয় এবং পরবর্তীটিটি ** আইপি-ভিত্তিক হোস্টিংয়ের জন্য ব্যবহৃত হয়।
Host:শিরোনাম না থাকায় বা যদি ডিএনএস লুকআপ ব্যর্থ হয় তবে অ্যাপাচি যদি সার্ভার নামটি কাজ করতে না পারে তবেServerName পরিবর্তে কনফিগার করা মানটি ব্যবহার করা হবে।