সুরক্ষা কোডের জন্য, দয়া করে আপনার টোকেনগুলি এইভাবে উত্পন্ন করবেন না: $token = md5(uniqid(rand(), TRUE));
এটি ব্যবহার করে দেখুন:
একটি সিএসআরএফ টোকেন তৈরি করা হচ্ছে
পিএইচপি 7
session_start();
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
সিডিনোট: আমার নিয়োগকর্তার একটি ওপেন সোর্স প্রকল্প ব্যাকপোর্টের উদ্যোগ random_bytes()
এবংrandom_int()
পিএইচপি 5 প্রকল্পে প্রবেশের । এটি এমআইটি লাইসেন্সধারী এবং প্যারাগনি / র্যান্ডম_কম্প্যাট হিসাবে গিথুব এবং সুরকারে উপলভ্য ।
পিএইচপি 5.3+ (বা এক্সক্রিপশন সহ)
session_start();
if (empty($_SESSION['token'])) {
if (function_exists('mcrypt_create_iv')) {
$_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
} else {
$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
}
}
$token = $_SESSION['token'];
সিএসআরএফ টোকেন যাচাই করা হচ্ছে
শুধু ব্যবহার করবেন না ==
বা এমনকি ===
, ব্যবহার hash_equals()
(পিএইচপি 5.6+ শুধুমাত্র কিন্তু পূর্ববর্তী সংস্করণে উপলব্ধ হ্যাশ-compat গ্রন্থাগার)।
if (!empty($_POST['token'])) {
if (hash_equals($_SESSION['token'], $_POST['token'])) {
} else {
}
}
প্রতি-ফর্ম টোকেনের সাথে আরও এগিয়ে যাওয়া
আপনি টোকেনগুলি কেবলমাত্র নির্দিষ্ট ফর্মের জন্য ব্যবহার করে সীমাবদ্ধ রাখতে পারেন hash_hmac()
। এইচএমএসি একটি নির্দিষ্ট কীড হ্যাশ ফাংশন যা ব্যবহার করা নিরাপদ এমনকি দুর্বল হ্যাশ ফাংশন (যেমন এমডি 5) সহ। যাইহোক, আমি পরিবর্তে SHA-2 পরিবার হ্যাশ ফাংশনগুলির ব্যবহার করার পরামর্শ দিচ্ছি।
প্রথমে এইচএমএসি কী হিসাবে ব্যবহারের জন্য দ্বিতীয় টোকেন তৈরি করুন, তারপরে এটি রেন্ডার করার জন্য এই জাতীয় যুক্তি ব্যবহার করুন:
<input type="hidden" name="token" value="<?php
echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
?>" />
এবং তারপরে টোকেন যাচাই করার সময় একটি সম্মিলিত অপারেশন ব্যবহার করুন:
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
if (hash_equals($calc, $_POST['token'])) {
}
এক ফর্মের জন্য উত্পন্ন টোকেনগুলি না জেনে অন্য প্রসঙ্গে পুনরায় ব্যবহার করা যাবে না $_SESSION['second_token']
। আপনি কেবলমাত্র পৃষ্ঠায় যেটি ফেলেছেন তার চেয়ে আলাদা এইচএমএএসি কী হিসাবে আলাদা টোকেন ব্যবহার করা গুরুত্বপূর্ণ।
বোনাস: হাইব্রিড অ্যাপ্রোচ + টুইগ ইন্টিগ্রেশন
যে কেউ টুইগ টেম্পলেটিং ইঞ্জিন ব্যবহার করেন তারা এই টুইটার পরিবেশে এই ফিল্টারটি যুক্ত করে একটি সরল দ্বৈত কৌশল থেকে উপকৃত হতে পারেন:
$twigEnv->addFunction(
new \Twig_SimpleFunction(
'form_token',
function($lock_to = null) {
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
if (empty($_SESSION['token2'])) {
$_SESSION['token2'] = random_bytes(32);
}
if (empty($lock_to)) {
return $_SESSION['token'];
}
return hash_hmac('sha256', $lock_to, $_SESSION['token2']);
}
)
);
এই টুইগ ফাংশনটি দিয়ে আপনি সাধারণ উদ্দেশ্য টোকেন উভয়ই ব্যবহার করতে পারেন:
<input type="hidden" name="token" value="{{ form_token() }}" />
বা লকড ডাউন বৈকল্পিক:
<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />
টুইগ কেবলমাত্র টেম্পলেট রেন্ডারিংয়ের সাথে সম্পর্কিত; আপনার এখনও টোকেনগুলি সঠিকভাবে বৈধ করতে হবে। আমার মতে, টুইগ কৌশলটি সর্বাধিক সুরক্ষার সম্ভাবনা বজায় রেখে বৃহত্তর নমনীয়তা এবং সরলতার প্রস্তাব দেয়।
একক-ব্যবহার সিএসআরএফ টোকেন
আপনার যদি কোনও সুরক্ষা প্রয়োজনীয়তা থাকে যে প্রতিটি সিএসআরএফ টোকেনকে ঠিক একবার ব্যবহার করার অনুমতি দেওয়া হয় তবে সহজতম কৌশলটি প্রতিটি সফল বৈধতার পরে এটি পুনরুত্থান করে। তবে এটি করার ফলে পূর্ববর্তী প্রতিটি টোকেন অকার্যকর হয়ে যায় যা একসাথে একাধিক ট্যাব ব্রাউজ করে এমন লোকদের সাথে ভাল মেশে না।
প্যারাগন ইনিশিয়েটিভ এন্টারপ্রাইজগুলি এই কোণার ক্ষেত্রে অ্যান্টি-সিএসআরএফ লাইব্রেরি বজায় রাখে । এটি একচেটিয়াভাবে প্রতি-ফর্ম টোকেনগুলির এক-ব্যবহারের সাথে কাজ করে। যখন পর্যাপ্ত টোকেনগুলি সেশন ডেটাতে সংরক্ষণ করা হয় (ডিফল্ট কনফিগারেশন: 65535), এটি প্রথমে পুরানো অবিশ্বাস্য টোকেনকে সরিয়ে ফেলবে।
token_time
জন্য ব্যবহার করা হয়?