یکی از اصلی ترین عناصر امنیت حساب کاربری (اکانت) در یک وب سایت، رمزعبور آن حساب است. اکثر کاربران تمایلی به استفاده از روش های ورود دو مرحله ای ندارند یا ممکن سایت شما چنین قابلیتی نداشته باشد و بخواهید کاربران را وادار کنید رمزعبور (پسورد) قدرتمندی برای حساب کاربری خود هنگام عضویت انتخاب کنند. کاربرانی که قصد دارند تنها یکبار از امکانات عضویت سایت شما استفاده کنند عموما از رمزعبورهای ساده مانند 123456 استفاده می کنند که اینکار باعث از دست رفتن امنیت وب سایت خواهد شد. در این تاپیک از انجمن بی تاک قصد داریم کدی را معرفی کنیم که می توانید در فرم عضویت خود استفاده کنید و رمزعبور کاربران را بررسی کنید و آنها را مجبور به استفاده از رمزعبور قدرتمند کنید.

تابع اصلی برای انجام اینکار، کد زیر است که می توانید مستقیما داخل فرم قبل از ارسال اطلاعات به دیتابیس از طریق متد GET
استفاده کنید یا به صورت آجاکس رمزعبور را هنگام وارد کردن داخل فرم بررسی کنید:
public function betalk_checkPassword($betalkpwd, &$errors) {
$errors_init = $errors;
if (strlen($betalkpwd) < 8) {
$errors[] = "رمزعبور حداقل باید 8 کاراکتر باشد";
}
if (!preg_match("#[0-9]+#", $betalkpwd)) {
$errors[] = "حداقل باید یک عدد داخل رمزعبور باشد";
}
if (!preg_match("#[a-zA-Z]+#", $betalkpwd)) {
$errors[] = "حداقل باید یک حرف انگلیسی داخل رمزعبور باشد";
}
if (!preg_match("#[A-Z]+#", $betalkpwd)) {
$errors[] = "حداقل باید یک حرف انگلیسی بزرگ داخل رمزعبور باشد";
}
if (!preg_match("#/[\[^\'£$%^&*()}{@:\'#~?><>,;@\|\\\-=\-_+\-¬\`\]]/+#", $betalkpwd)) {
$errors[] = "حداقل باید یک کاراکتر خاص داخل رمزعبور باشد";
}
return ($errors == $errors_init);
}
تنظیمات:
- در خط 4 بجای عدد 8 باید حداقل تعداد کاراکترهای رمزعبور را وارد کنید.
- خطوط 7 و 10 و 13 و 16 دستورات شرطی برای بررسی رمزعبور هستند. طبق متن خطای هر دستور شرطی می توانید بفهمید آن دستور برای چه کاری استفاده شده است و در صورت عدم نیاز به آن می توانید حذف کنید.
حالت دوم PHP
کد بالا از نوع Public Function
هست که امنیت بیشتری هنگام اجرا به سایت شما می دهد و خروجی آن دقیق تر است اما اگر می خواهید از دستور شرطی عادی تر استفاده کنید می توانید چنین کدی استفاده کنید:
<?php $betalkpwd = $_POST ["Password"];
if (strlen($betalkpwd) < 8) {
$errors[] = "رمزعبور حداقل باید 8 کاراکتر باشد";
}
if (!preg_match("#[0-9]+#", $betalkpwd)) {
$errors[] = "حداقل باید یک عدد داخل رمزعبور باشد";
}
if (!preg_match("#[a-zA-Z]+#", $betalkpwd)) {
$errors[] = "حداقل باید یک حرف انگلیسی داخل رمزعبور باشد";
}
if (!preg_match("#[A-Z]+#", $betalkpwd)) {
$errors[] = "حداقل باید یک حرف انگلیسی بزرگ داخل رمزعبور باشد";
}
if (!preg_match("#/[\[^\'£$%^&*()}{@:\'#~?><>,;@\|\\\-=\-_+\-¬\`\]]/+#", $betalkpwd)) {
$errors[] = "حداقل باید یک کاراکتر خاص داخل رمزعبور باشد";
}
?>
این روش مانند روش قبل است اما با این تفاوت که باید در فایل PHP مربوط به اجرای فرم استفاده شود و فراموش نکنید در خط اول، نام فیلد رمزعبورتان را جایگزین کنید.
حالت جاوا اسکریپت
دو کد قبل با PHP بودند که می توانید در فایل PHP اجرایی فرم استفاده کنید تا بتوانید به اسکریپت خود این قابلیت را بدهید که ابتدا ورودی رمزعبور را بررسی کند و سپس تصمیم بگیرد اطلاعات فرم را در دیتابیس ذخیره کند یا خیر. اما روش PHP تنها مشکلی که می تواند داشته باشد نیاز به اجرای دستورات اضافه هنگام ارسال فرم است که گاهی اوقات می تواند روی اینترنت های ضعیف تر مانع ثبت کامل فرم شود.
راه دیگر برای بررسی کردن رمزعبور قوی یا ضعیف، استفاده از جاوا اسکریپت داخل فرم عضویت است با این روش که تابعی تعریف کنیم برای بررسی رمزعبور و سپس با دستور onClick
روی کلید ثبت فرم یا دستور onkeyup
روی فیلد رمزعبور، قدرت رمزعبور را بررسی کنیم.
برای شروع ابتدا باید تابع جاوااسکریپت موردنظرمان را بالای فرم عضویت قرار دهیم:
<script>
function validatePassword(password) {
// مخفی کردن پیام رمزعبور هنگامی که فیلد خالی است
if (password.length === 0) {
document.getElementById("msg").innerHTML = "";
return;
}
// تعریف شرط برای کاراکترهای رمزعبور
var matchedCase = new Array();
matchedCase.push("[$@$!%*#?&]"); // کاراکترهای خاص
matchedCase.push("[A-Z]"); // حروف بزرگ
matchedCase.push("[0-9]"); // اعداد
matchedCase.push("[a-z]"); // حروف کوچک
// بررسی شرایط
var ctr = 0;
for (var i = 0; i < matchedCase.length; i++) {
if (new RegExp(matchedCase[i]).test(password)) {
ctr++;
}
}
// نمایش متن
var color = "";
var strength = "";
switch (ctr) {
case 0:
case 1:
case 2:
strength = "بسیار ضعیف";
color = "red";
break;
case 3:
strength = "متوسط";
color = "orange";
break;
case 4:
strength = "قوی";
color = "green";
break;
}
document.getElementById("msg").innerHTML = strength;
document.getElementById("msg").style.color = color;
}
</script>
سپس باید تعیین کنیم که این تابع جاوا اسکریپت چه زمانی استفاده شود.
می توانیم با دستور onClick
روی کلید ثبت فرم این دستور را اعمال کنیم تا موقع ثبت فرم رمزعبور کاربر بررسی شود. یعنی به این صورت:
<button type="submit" onclick="validatePassword()">ثبت</button>
<span id="msg"></span>
یا تابع را روی فیلد رمزعبور با دستور onkeyup
اجرا کنیم تا زمانی که کاربر یک حرف یا عدد وارد کرد، بعد از وارد کردن رمزعبور جدید با شرایط داخل جاوا اسکریپت تطبیق داده شود و قدرت رمزعبور با هر بار وارد کردن کاراکتر محاسبه شود. به این صورت:
<label for="pwd">رمزعبور:</label>
<input type="text" id="pwd" onkeyup="validatePassword(this.value);"/>
<span id="msg"></span>