du kan krypterer alle dine password i et hug
database før
CREATE TABLE `bruger` (
`id` int(11) NOT NULL,
`firstname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
`lastname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
`brugernavn` varchar(255) COLLATE utf8_danish_ci NOT NULL,
`password` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;
INSERT INTO `bruger` (`id`, `firstname`, `lastname`, `brugernavn`, `password`) VALUES
(1, 'rip', 'andemad', 'rip', '1234'),
(3, 'rap', 'and', 'rap', '1234'),
(4, 'rup', 'and', 'rup', '1234'),
(5, 'mickey', 'mouse', 'mickey', '1234'),
(7, 'bimmer', 'vildmand', 'bimmer', '1234'),
(8, 'jule', 'mand', 'jule', '1234');
ALTER TABLE `bruger`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `brugernavn` (`brugernavn`),
ADD KEY `idx_username_password` (`brugernavn`,`password`),
ADD KEY `idx_lastname` (`lastname`);
ALTER TABLE `bruger`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
med dette script.
nb må kun køres 1 og kun 1 gang
<?php
require_once("Connect2.php");
$sql = "SELECT * FROM bruger";
$result = $db->query($sql);
while ($row = $result->fetch_assoc()) {
$hash = password_hash($row["password"], PASSWORD_BCRYPT);
$brugernavn = $row["brugernavn"];
$sql1 = "UPDATE bruger SET password='$hash' WHERE brugernavn='" . $brugernavn . "'";
$result1 = $db->query($sql1);
}
?>
database efter
CREATE TABLE `bruger` (
`id` int(11) NOT NULL,
`firstname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
`lastname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
`brugernavn` varchar(255) COLLATE utf8_danish_ci NOT NULL,
`password` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;
INSERT INTO `bruger` (`id`, `firstname`, `lastname`, `brugernavn`, `password`) VALUES
(1, 'rip', 'andemad', 'rip', '$2y$10$xenTPxs7uJRSzhHAvW99Y.qvnJ7uzzCr2gk4y7irhOaxEQ9ihfg6q'),
(3, 'rap', 'and', 'rap', '$2y$10$doEWK3tUG0hAS9Rk5l5ZPOj3vx1VyrLwS7qcS.h5xKlc5TyN8LqUi'),
(4, 'rup', 'and', 'rup', '$2y$10$3Mpd1g/yrzNlF9RW7sIjyez67U2Ls/KQ46gqURWxmP16vDd6BpIR.'),
(5, 'mickey', 'mouse', 'mickey', '$2y$10$jhBrLlCeqXdq1lHEdiHSqe1abOO3PGKDwap87IkScDONzxaFKb1/C'),
(7, 'bimmer', 'vildmand', 'bimmer', '$2y$10$YDUF/0uW.9pLwtfJSz396eZmp8kicrlkB31aHiuRfucD.DPNDFx4.'),
(8, 'jule', 'mand', 'jule', '$2y$10$VCdMK5fY5zYQOQAoYlMV3OxvvHfvkrtXIPvUSTnOpWHhqJ9wpSDvm');
ALTER TABLE `bruger`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `brugernavn` (`brugernavn`),
ADD KEY `idx_username_password` (`brugernavn`,`password`),
ADD KEY `idx_lastname` (`lastname`);
ALTER TABLE `bruger`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
som du kan se har alle brugerne sammen password, men hvis du kunne i databasen efter ser det ikke ud som de har sammen password, årsagen er forskællig salt
nu kan en person der har / får adgang til databasen ikke se brugerne password
, nu kan du ikke sende brugeren hans nuværende password, hvis han skulle have glemt det, men skal lave et nyt password og sende til ham, og sådan bør det også være.
logon side
<?php
// hvis session ikke er started, så start session
if (!isset($_SESSION)) session_start();
// $db = er erklæret her (mysqli connection)
require_once("Connect2.php"); //Establishing connection with our database
if (isset($_POST["submit"])) {
if (empty($_POST["brugernavn"]) || empty($_POST["password"])) {
$error = "Both fields are required.";
} else {
// Define $username and $password
$brugernavn = $_POST['brugernavn'];
$password = $_POST['password'];
// To protect from MySQL injection
// $brugernavn = stripslashes($brugernavn);
// $brugernavn = mysqli_real_escape_string($db, $brugernavn);
// Træk hash fra database
$sql = "SELECT password FROM bruger WHERE brugernavn='$brugernavn' LIMIT 1";
$result = mysqli_query($db, $sql);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
//Antag brugeren ikke kunne logge ind.
$password_validated = false;
if (!is_null($row)) {
// Hvis vi fandt en database entry så prøv og valider hashen med det submittede password.
$hash = $row['password'];
$password_validated = password_verify($password, $hash);
}
if ($password_validated) {
echo "correct username and password.";
// $_SESSION['brugernavn'] = $brugernavn; // Initializing Session
// header("location: forsideP.php"); // Redirecting To Other Page
} else {
echo "Incorrect username or password.";
}
}
}
?>
test form
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<label><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="brugernavn" required>
<label><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="password" required>
<button type="submit" name="submit" >Login</button>
</form>
et andet sted du kan forbedre din sikkerhed er ved at bruge Prepare Statement, en mini guide er
www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf