Följande har jag använt i mitt exjobb för att generera och validera lösenord:
Generera ett kryptografiskt säkert lösenord (om random_int() betraktas kryptografiskt säkert)
// This function generates a random password
function generatePassword($length = 16)
{
// Define the characters that can be used in the random string
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^*()_+{}|:?-=[]\;,./';
$lowercase = 'abcdefghijklmnopqrstuvwxyz';
$uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$special = '!@#$%^*()_+{}|:?-=[]\;,./';
// Define the length of the characters
$charactersLength = mb_strlen($characters);
// Define the random string
$randomString = '';
// Loop through the length of the string
for ($i = 0; $i < $length; $i++) {
// Append a random character from the characters string to the random string
// random_int is cryptographically secure!!
$randomString .= $characters[random_int(0, $charactersLength - 1)];
}
// Now before we return the random string (password), we must check that it actually contains at least one number (0-9),
// one uppercase letter (A-Z), one lowercase letter (a-z) and one special character (!@#$%^*()_+{}|:?-=[]\;,./)
// otherwise just add one of each to the end of the string
if (!preg_match('/[0-9]/', $randomString)) {
$randomString .= random_int(0, 9);
}
if (!preg_match('/[A-Z]/', $randomString)) {
$randomString .= $lowercase[random_int(0, mb_strlen($lowercase) - 1)];
}
if (!preg_match('/[a-z]/', $randomString)) {
$randomString .= $uppercase[random_int(0, mb_strlen($uppercase) - 1)];
}
if (!preg_match('/[!@#\$%\^*()_+\{\}\|\:\?\-\=\[\]\\\\;\,\.\-\/]/', $randomString)) {
$randomString .= $special[random_int(0, mb_strlen($special) - 1)];
}
// Now, return the random string
return $randomString;
}
Dold text
Möjligen bör lösenordsgeneratorn förbättras genom att de saknade tecknen för ett starkt lösenord blandas in någonstans i den annars färdiga strängen istället för att bara läggas till slutet som den gör just nu. Array_splice() med random_int() för position?
Validera eget inmatat nytt lösenord
// Function that validates empty, min and max length of a string
// that is specifically of the type password using the reference to
// an error variable that will be set if the validation fails.
function validatePassword($input, &$errorReference, $minLength, $maxLength, $fieldName, &$allOK)
{
// Check if the input is empty
if (empty($input)) {
$errorReference = "$fieldName is required!";
$allOK = false;
} // Check if the input is too short
else if (mb_strlen($input) < $minLength) {
$errorReference = "$fieldName is too short! Must be at least $minLength characters!";
$allOK = false;
} // Check if the input is too long
else if (mb_strlen($input) > $maxLength) {
$errorReference = "$fieldName is too long! Must be at most $maxLength characters!";
$allOK = false;
} // Check if the input contains at least one uppercase letter
else if (!preg_match("/[A-Z]/", $input)) {
$errorReference = "$fieldName must contain at least one uppercase letter! (A-Z)";
$allOK = false;
} // Check if the input contains at least one lowercase letter
else if (!preg_match("/[a-z]/", $input)) {
$errorReference = "$fieldName must contain at least one lowercase letter! (a-z)";
$allOK = false;
} // Check if the input contains at least one number
else if (!preg_match("/[0-9]/", $input)) {
$errorReference = "$fieldName must contain at least one number! (0-9)";
$allOK = false;
} // Check if the input contains at least one special character
else if (!preg_match("/[^a-zA-Z0-9]/", $input)) {
$errorReference = "$fieldName must contain at least one special character! (!@#$%^*()_+{}|:?-=[]\;,./)";
$allOK = false;
}
}
Dold text
Jag hoppas att Tietoevrys ledning tar in åtminstone en person som vill tänka förebyggande och inte enbart "Snabba cash". Det är pinsamt att företaget har bristande IT-säkerhet - som om ett städbolag med bajskorvar utanför sina egna toalettsitsar!
Mvh,
WKL.