অন্য কথায়, আমার ওয়েব অ্যাপ্লিকেশনটি ব্যবহার করা ব্যক্তি যদি সার্ভারে থাকে তবে এটি কীভাবে বলতে পারি? যদি আমি সঠিকভাবে মনে রাখি তবে সুরক্ষার কারণে পিএইচপিএমইএডমিন এ জাতীয় কিছু করে।
অন্য কথায়, আমার ওয়েব অ্যাপ্লিকেশনটি ব্যবহার করা ব্যক্তি যদি সার্ভারে থাকে তবে এটি কীভাবে বলতে পারি? যদি আমি সঠিকভাবে মনে রাখি তবে সুরক্ষার কারণে পিএইচপিএমইএডমিন এ জাতীয় কিছু করে।
উত্তর:
$_SERVER['REMOTE_ADDR']
ওয়েব সার্ভারের দ্বারা অনুরোধ করা ক্লায়েন্টের আইপি ঠিকানাটি আপনি ব্যবহার করতে পারেন ।
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
Host: 127.0.0.1
এবং এটি জনবহুল হবে HTTP_HOST
, সুতরাং এটি মোটেই নির্ভরযোগ্য পদ্ধতি নয়।
$whitelist = array('127.0.0.1', '::1');
পরিপূরক হিসাবে, একটি ফাংশন হিসাবে ...
function isLocalhost($whitelist = ['127.0.0.1', '::1']) {
return in_array($_SERVER['REMOTE_ADDR'], $whitelist);
}
$_SERVER["REMOTE_ADDR"]
আপনাকে ব্যবহারকারীর আইপি বলতে হবে। যদিও এটি স্পোকযোগ্য।
খুব বিশদ আলোচনার জন্য এই অনুগ্রহ প্রশ্নটি পরীক্ষা করুন ।
আমি মনে করি আপনি পিএইচপিএমইএডমিনের সাথে যা মনে রাখছেন তা অন্যরকম: অনেক মাইএসকিউএল সার্ভারগুলি কনফিগার করা হয়েছে যাতে তারা কেবল সুরক্ষার কারণে লোকালহোস্ট থেকে অ্যাক্সেস করতে পারে।
আমি দুঃখিত তবে এই সব উত্তর আমার কাছে ভয়ঙ্কর বলে মনে হচ্ছে। আমি প্রশ্নটি পুনরায় চাপিয়ে দেওয়ার পরামর্শ দেব কারণ একটি অর্থে সমস্ত মেশিনই "লোকালহোস্ট"।
প্রশ্ন হওয়া উচিত; কোন মেশিনে এটি চালিত হয় তার উপর নির্ভর করে আমি কীভাবে বিভিন্ন কোড পাথ পরিচালনা করব।
আমার মতে, সবচেয়ে সহজ উপায় হল DEVMACHINE নামক একটি ফাইল তৈরি করা বা আপনি যা চান তা যাচাই করে তারপরে কেবল যাচাই করা
file_exists ('DEVMACHINE')
লাইভ হোস্টিং পরিবেশে আপলোড করার সময় এই ফাইলটি বাদ দিতে ভুলবেন না!
এই সমাধানটি নেটওয়ার্ক কনফিগারেশনের উপর নির্ভর করে না, এটি ছদ্মবেশযুক্ত করা যায় না এবং "লাইভ-কোড" এবং "দেব-কোড" চলমান মধ্যে স্যুইচ করা সহজ করে তোলে।
আপনার ব্যবহার করা উচিত বলে মনে হচ্ছে না $_SERVER['HTTP_HOST']
, কারণ এটি সহজেই নকল, HTTP শিরোনামের মান।
আপনি $_SERVER["REMOTE_ADDR"]
খুব ব্যবহার করতে পারেন , এটি আরও সুরক্ষিত মান, তবে এটি জাল করাও সম্ভব। এটি remote_addr
সেই ঠিকানা যেখানে অ্যাপাচি ফলাফল দেয়।
REMOTE_ADDR
নকল করা সম্ভব, তবে আপনি যদি এটি নকল করতে চান 127.0.0.1
বা হিসাবে ::1
, তার জন্য মেশিনের সাথে আপোস করা দরকার, যেখানে একটি স্পোফড REMOTE_ADDR
আপনার উদ্বেগের মধ্যে সবচেয়ে কম। প্রাসঙ্গিক উত্তর - stackoverflow.com/a/5092951/3774582
যদি আপনি কোনও শ্বেতলিস্ট / অনুমতি তালিকা থাকতে চান যা স্থির আইপি এবং গতিশীল নামগুলি সমর্থন করে ।
উদাহরণ স্বরূপ:
$whitelist = array("localhost", "127.0.0.1", "devel-pc.ds.com", "liveserver.com");
if (!isIPWhitelisted($whitelist)) die();
এইভাবে আপনি নাম / আইপিগুলির একটি তালিকা সেট করতে পারেন যা সনাক্ত করতে সক্ষম হবে (নিশ্চিত হয়ে)। গতিশীল নামগুলি বিভিন্ন পয়েন্ট থেকে অ্যাক্সেসের জন্য আরও নমনীয়তা যুক্ত করে।
আপনার এখানে দুটি সাধারণ বিকল্প রয়েছে, আপনি আপনার স্থানীয় হোস্ট ফাইলে একটি নাম সেট করতে পারেন বা আপনি কেবলমাত্র একটি ডায়নামিক নাম সরবরাহকারীর ব্যবহার করতে পারেন যা যে কোনও জায়গায় পাওয়া যায়।
এই ফাংশনটি ক্যাস করে কারণ গ্যাথস্টবাইমনাম খুব ধীর ফাংশন।
এই pupose জন্য আমি এই ফাংশনটি প্রয়োগ করেছি:
function isIPWhitelisted($whitelist = false)
{
if ( isset($_SESSION) && isset($_SESSION['isipallowed']) )
{ return $_SESSION['isipallowed']; }
// This is the whitelist
$ipchecklist = array("localhost", "127.0.0.1", "::1");
if ($whitelist) $ipchecklist = $whitelist;
$iplist = false;
$isipallowed = false;
$filename = "resolved-ip-list.txt";
$filename = substr(md5($filename), 0, 8)."_".$filename; // Just a spoon of security or just remove this line
if (file_exists($filename))
{
// If cache file has less than 1 day old use it
if (time() - filemtime($filename) <= 60*60*24*1)
$iplist = explode(";", file_get_contents($filename)); // Read cached resolved ips
}
// If file was not loaded or found -> generate ip list
if (!$iplist)
{
$iplist = array(); $c=0;
foreach ( $ipchecklist as $k => $iptoresolve )
{
// gethostbyname: It's a VERY SLOW function. We really need to cache the resolved ip list
$ip = gethostbyname($iptoresolve);
if ($ip != "") $iplist[$c] = $ip;
$c++;
}
file_put_contents($filename, implode(";", $iplist));
}
if (in_array($_SERVER['REMOTE_ADDR'], $iplist)) // Check if the client ip is allowed
$isipallowed = true;
if (isset($_SESSION)) $_SESSION['isipallowed'] = $isipallowed;
return $isipallowed;
}
ভাল নির্ভরযোগ্যতা জন্য আপনি প্রতিস্থাপন করতে পারে , $ _SERVER [ 'REMOTE_ADDR'] জন্য get_ip_address () যে @Pekka তার উল্লেখ পোস্টে যেমন "এই খয়রাত প্রশ্ন"
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
সার্ভারের মতো ক্লায়েন্ট একই মেশিনে রয়েছে কিনা তা নির্ধারণের জন্য কীভাবে তুলনা করবেন?
$_SERVER['SERVER_ADDR']
সার্ভারের ঠিকানাটি সর্বদা নির্ভরযোগ্যভাবে ফিরিয়ে দেয় না যেমন লোড ব্যালেন্সার ব্যবহার করে এটি আমার বিশ্বাস করা লোড ব্যালেন্সারের আইপি ঠিকানা প্রদান করে।
আমি একটি সহজ উত্তর খুঁজে পেয়েছি।
কারণ সমস্ত লোকাল ড্রাইভে সি: বা ডি: বা এফ: ... ইত্যাদি রয়েছে have
দ্বিতীয় অক্ষরটি একটি কিনা তা সনাক্ত করুন:
if ( substr_compare(getcwd(),":",1,1) == 0)
{
echo '<script type="text/javascript">alert(" The working dir is at the local computer ")</script>';
$client_or_server = 'client';
}
else
{
echo '<script type="text/javascript">alert(" The working dir is at the server ")</script>';
$client_or_server = 'server';
}