PHP md5 в условных
У меня есть простой скрипт, который я пытаюсь сделать простой пользователь md5 / пароль ом. проблема, которую я имею, состоит в том, что независимо от того, что я помещаю в поля user/pass, это соответствует условным выражениям и позволяет загружать include
<?php
if(md5($_POST['user']) === 'md5user' && md5($_POST['pass']) === 'md5pass'):
include("secure.php");
else: ?>
<body>
<div class="container" style="width: 20%;">
<div class="row-fluid well" style="background: #333; margin-top: 25%;">
<p class="lead">Inventory Update Login</p>
<form class="form" method="POST" action="secure.php">
<label>User Name</label><input class="input-block-level" type="text" name="user"></input><br/>
<label>Password</label><input class="input-block-level" type="password" name="pass"></input><br/>
<input class="btn btn-primary" type="submit" name="submit" value="Go"></input>
</form>
<div class="alert alert-error">
<h4>Warning!</h4>
Best check yo self, you're not supposed to be here by accident. If you are here to do something naughty, keep in mind we are a company owned by people with guns!
</div>
</div>
</div>
</body>
secure.php:
<?php
$secretkey = "12345";
print_r($_POST);
?>
<html>
<head>
<link rel="stylesheet" href="https://dev.zinkcalls.com/media/jui/css/bootstrap.min.css" type="text/css" />
<style>
body {color: #fff;}
.well, .brand, .navbar-inner, .popover, .btn, .tooltip, input, select, textarea, pre, .progress, .modal, .add-on, .alert, .table-bordered, .nav>.active>a, .dropdown-menu, .dropdown-menu>li>a:hover, .tooltip-inner, .badge, .label, .img-polaroid {
background-image: none !important;
border-collapse: collapse !important;
box-shadow: none !important;
-moz-box-shadow: none !important;
-webkit-box-shadow: none !important;
border: none;
text-shadow: none !important;
}
</style>
</head>
<body>
<div class="container" style="width: 20%;">
<div class="row-fluid well" style="background: #333; margin-top: 25%;">
<?php if((!isset($_POST['key']) or ($_POST['key'] != $secretkey)) and !isset($_POST['update'])): ?>
<div class="alert alert-error">
<h4>Whoaa!</h4>You need the secret key bro.
</div>
<form class="form" method="POST" action="secure.php">
<label>Secret Key</label><input class="input-block-level" type="text" name="key" /><br/>
<input class="btn btn-primary" type="submit" name="submit" value="Enter Secret Key" />
</form>
<?php elseif(($_POST['key'] = $secretkey) and !isset($_POST['update'])): ?>
<div class="alert alert-error">
<h4>Careful!</h4>
You may destroy everything in one click of the button. Proceed?
</div>
<form class="form" method="POST" action="secure.php">
<input class="btn btn-primary" type="submit" name="update" value="Yes" />
<input class="btn" type="reset" name="abort" value="No" />
</form>
<?php else:?>
<div class="alert alert-success">
<?php include("inventory_query.php"); ?>
<h4>Done!</h4>
Now get the hell outta here.
</div>
<?php endif; ?>
<hr />
<form class="form" method="POST" action="inventory.php">
<input class="btn btn-primary" type="submit" name="logout" value="Logout" />
</form>
</div>
</div>
</body>
</html>
2 ответа
Ваша форма отправлена на secure.php
и так как этот файл не содержит эту проверку (я полагаю), все в нем просто выполняется / отображается. Удалить action="secure.php"
от form
-Tag для POST для себя.
PS. узнайте о сессиях, если вы хотите более постоянный вход в систему.
Хорошо, во-первых, md5
не следует использовать с паролями из соображений безопасности. Пожалуйста, прочитайте тему, так как я не буду вдаваться в подробности.
Это, как говорится, вот проблема, которую вы испытываете.
md5
собирается вернуть хэш md5 предоставленной строки. Например:
echo md5('md5pass'); // 65ed8a5eec59a1a6f75ec845294aead8
Это не изменится. Это новая строка, которую нельзя сравнить с ее необработанным аналогом, в данном случае md5pass. Что вы можете сделать, это сравнить хеш пользовательского значения с ожидаемым значением.
В этом случае, md5($_POST['pass']) === md5('md5pass')
, будет только оценивать, если $_POST['pass']
это "md5pass".
Опять же, пожалуйста, посмотрите на хеширование ваших паролей.
Редактировать:
@ Питер ван дер Валь тоже прав. Вы никогда не будете выполнять нужную проверку, пока не исправите действие формы.