سكربت إيفاد المجاني لنقل الملفات عبر الاستضافات بواسطة بروتوكول FTP
لم أقرأ الكود بشكل كامل و لم أجربه للآن. كنت من مبرمجي PHP لكن تركتها :)
بشكل سريع رأيت :
function create_password($len) { //دالة توليد كلمة المرور, وتستخدم أيضاً في توليد مفتاح تشفير الجلسة
$a = array('a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','~','!','@','#','$','%','^','&','*','(',')','-','=','+','_','{','}','|','<','>','?',',','.','/',';','[',']');
shuffle($a);
return substr(implode($a), 0, $len);
}
في دالتك، كل حرف لا يتكرر مرتين. في خطوتك هذه، أرحت المخترق بتقليل احتماليات كلمة السر التي تنتجها دالتك.
بلغة الرياضيات، إذا طول الكلمة السرية المرغوبة هو 12 حرف.
عدد كلمات السر التي قد تنتجها دالتك (كل حرف يتكرر مرة واحد فقط) هو 98373462462399553228800
عدد كلمات السر التي قد تنتجها دالة تكرر الحروف : 215671155821681003462656
الدالة الأخرى لديها أكثر من ضعفي عدد مُخرجات دالتك.
تم التحديث للتالي لزيادة العشوائية والـ Performance:
function create_password($len) { //دالة توليد كلمة المرور, وتستخدم أيضاً في توليد مفتاح تشفير الجلسة
$a = array('a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','~','!','@','#','$','%','^','&','*','(',')','-','=','+','_','{','}','|','<','>','?',',','.','/',';','[',']');
$pwd = '';
for ($i = 0; $i < $len; $i++){
$pwd .= $a[rand(0, 87)];
}
if (strength($pwd) < 4) return create_password($len);
else return $pwd;
}
تم التحديث:
function strength($pwd) { //دالة تقدير قوة كلمة المرور. النتيجة: من 0 إلى 5
$score = 0;
if (strlen($pwd) < 4) {return $score;}
if (strlen($pwd) >= 8) {$score++;}
if (strlen($pwd) >= 10) {$score++;}
if (preg_match('/[a-z]/', $pwd) && preg_match('/[A-Z]/', $pwd)) {$score++;}
if (preg_match('/[0-9]/', $pwd)) {$score++;}
if (preg_match('/[\'\/~`\!@#\$£%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $pwd)) {$score++;}
return($score);
}
function create_password($len) { //دالة توليد كلمة المرور, وتستخدم أيضاً في توليد مفتاح تشفير الجلسة
$a = array('a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','~','!','@','#','$','%','^','&','*','(',')','-','=','+','_','{','}','|','<','>','?',',','.','/',';','[',']');
$pwd = '';
for ($i = 0; $i < $len; $i++){
shuffle($a);
$pwd .= $a[0];
}
if (strength($pwd) < 4) return create_password($len);
else return $pwd;
}
التعليقات