1: অন্তর্ভুক্ত ফাইলগুলির গণনা পরীক্ষা করা হচ্ছে
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
যুক্তি: পিএইচপি যদি সর্বনিম্ন অন্তর্ভুক্ত গণনাটি পূরণ না করে তবে প্রস্থান করে। নোট করুন যে পিএইচপি 5 এর আগে, বেস পৃষ্ঠাকে অন্তর্ভুক্ত হিসাবে বিবেচনা করা হয় না।
2: একটি গ্লোবাল ধ্রুবক সংজ্ঞায়িত এবং যাচাইকরণ
// In the base page (directly accessed):
define('_DEFVAR', 1);
// In the include files (where direct access isn't permitted):
defined('_DEFVAR') or exit('Restricted Access');
যুক্তি: যদি ধ্রুবকটি সংজ্ঞায়িত না করা হয়, তবে নির্বাহটি বেস পৃষ্ঠ থেকে শুরু হয় নি, এবং পিএইচপি মৃত্যুদন্ড কার্যকর করবে।
নোট করুন যে আপগ্রেড এবং ভবিষ্যতের পরিবর্তনগুলি জুড়ে বহনযোগ্যতার স্বার্থে, এই প্রমাণীকরণ পদ্ধতিটি মডুলার করা কোডিং ওভারহেডকে উল্লেখযোগ্যভাবে হ্রাস করবে কারণ পরিবর্তনগুলি প্রতিটি ফাইলটিতে হার্ড-কোডিং করা দরকার হবে না।
// Put the code in a separate file instead, say 'checkdefined.php':
defined('_DEFVAR') or exit('Restricted Access');
// Replace the same code in the include files with:
require_once('checkdefined.php');
এই ভাবে অতিরিক্ত কোড লগিং এবং বিশ্লেষণমূলক উদ্দেশ্যে, পাশাপাশি যথাযথ প্রতিক্রিয়া উত্পন্ন করার জন্য যুক্ত করা যেতে পারে checkdefined.php
।
ক্রেডিট যেখানে credit ণ জমা আছে: বহনযোগ্যতার উজ্জ্বল ধারণাটি এই উত্তর থেকে এসেছে ।
3: দূরবর্তী ঠিকানা অনুমোদন
// Call the include from the base page(directly accessed):
$includeData = file_get_contents("http://127.0.0.1/component.php?auth=token");
// In the include files (where direct access isn't permitted):
$src = $_SERVER['REMOTE_ADDR']; // Get the source address
$auth = authoriseIP($src); // Authorisation algorithm
if( !$auth ) exit('Restricted Access');
অভ্যন্তরীণ অনুরোধের সাথে সেশন-টোকেন সরবরাহ না করা হলে এই পদ্ধতির সাথে অপূর্ণতা পৃথকভাবে কার্যকর করা হয়। একক সার্ভার কনফিগারেশনের ক্ষেত্রে লুপ-ব্যাক ঠিকানার মাধ্যমে, বা কোনও বহু-সার্ভার বা লোড-ভারসাম্যযুক্ত সার্ভার অবকাঠামোর জন্য একটি ঠিকানা শ্বেত-তালিকার মাধ্যমে যাচাই করুন।
4: টোকেন অনুমোদন
পূর্ববর্তী পদ্ধতির মতো, কেউ অন্তর্ভুক্ত ফাইলটিতে অনুমোদনের টোকেন পাস করতে GET বা POST ব্যবহার করতে পারেন:
if($key!="serv97602"){header("Location: ".$dart);exit();}
একটি খুব অগোছালো পদ্ধতি, তবে একই সময়ে সম্ভবত সবচেয়ে সুরক্ষিত এবং বহুমুখী, যখন সঠিক উপায়ে ব্যবহৃত হয়।
5: ওয়েবসভার নির্দিষ্ট কনফিগারেশন
বেশিরভাগ সার্ভার আপনাকে পৃথক ফাইল বা ডিরেক্টরিগুলির জন্য অনুমতি বরাদ্দ করতে দেয়। আপনি এই জাতীয় সীমাবদ্ধ ডিরেক্টরিতে আপনার সমস্ত অন্তর্ভুক্ত রাখতে পারেন এবং সেগুলি অস্বীকার করার জন্য সার্ভারটি কনফিগার করা হয়েছে।
উদাহরণস্বরূপ এপাচে, কনফিগারেশনটি .htaccess
ফাইলে সংরক্ষণ করা হয় । টিউটোরিয়াল এখানে ।
তবে নোট করুন যে সার্ভার-নির্দিষ্ট কনফিগারেশনগুলি আমার দ্বারা প্রস্তাবিত নয় কারণ তারা বিভিন্ন ওয়েব-সার্ভার জুড়ে বহনযোগ্যতার জন্য খারাপ। কনটেন্ট ম্যানেজমেন্ট সিস্টেমের ক্ষেত্রে যেখানে অস্বীকার-অ্যালগরিদম জটিল বা অস্বীকৃত ডিরেক্টরিগুলির তালিকাটি বড়, এটি কেবল পুনরায় কনফিগারেশন সেশনগুলিকে বরং মারাত্মক করে তুলবে। শেষ পর্যন্ত কোডটিতে এটি হ্যান্ডেল করা ভাল।
6: স্থাপনের একটি সুরক্ষিত ডিরেক্টরি অন্তর্ভুক্ত সাইট রুট বাইরে
সার্ভার পরিবেশে অ্যাক্সেস সীমাবদ্ধতার কারণে কমপক্ষে পছন্দ করা হয়েছে তবে ফাইল-সিস্টেমে আপনার অ্যাক্সেস থাকলে একটি শক্তিশালী পদ্ধতি।
//Your secure dir path based on server file-system
$secure_dir=dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR."secure".DIRECTORY_SEPARATOR;
include($secure_dir."securepage.php");
লজিক:
- ব্যবহারকারী
htdocs
ফোল্ডারের বাইরে কোনও ফাইলের জন্য অনুরোধ করতে পারবেন না কারণ লিঙ্কগুলি ওয়েবসাইটের ঠিকানা সিস্টেমের আওতার বাইরে থাকবে।
- পিএইচপি সার্ভারটি স্থানীয়ভাবে ফাইল-সিস্টেমটি অ্যাক্সেস করে এবং তাই প্রয়োজনীয় সুযোগ-সুবিধাগুলি সহ একটি সাধারণ প্রোগ্রাম কীভাবে এটি কম্পিউটারে ফাইল অ্যাক্সেস করতে পারে।
- এই ডিরেক্টরিতে অন্তর্ভুক্ত ফাইলগুলি স্থাপন করে, আপনি নিশ্চিত করতে পারেন যে পিএইচপি সার্ভার সেগুলি অ্যাক্সেস করতে পারে, যখন হটলিংক ব্যবহারকারীর কাছে অস্বীকৃত।
- এমনকি যদি ওয়েবসারভারের ফাইল সিস্টেম অ্যাক্সেস কনফিগারেশনটি সঠিকভাবে না করা হয়, এই পদ্ধতিটি দুর্ঘটনাক্রমে এই ফাইলগুলি সর্বজনীন হতে বাধা দেয়।
আমার অপ্রচলিত কোডিং কনভেনশন অনুগ্রহ করে দয়া করে। কোন প্রতিক্রিয়া প্রশংসা করা হয়।