Мне нужно реализовать для текущего проекта некоторый безопасный вход в php. Я написал что-то с подготовленными заявлениями pdo со старым кодом, имеющим в виду. Мне нужны советы, чтобы реализовать более безопасный, возможно, или проверить, является ли это доказательством для sql-атаки, атак.пытается создать безопасный вход с php
<form action="validate.php" method=post>
<table class="loginForm">
<thead></thead>
<tbody>
<tr>
<td>UserName:</td>
<td><input name=user_name></td>
</tr>
<tr>
<td>Pass:</td>
<td><input type=password name=password></td>
</tr>
<tr>
<td><input class=loginBtn type=submit value='Log me in' name=login></td>
</tr>
</tbody>
</table>
</form>
Validate.php
session_start();
try {
$host = 'localhost';
$dbName = 'xxx';
$dbUser = 'xxx';
$dbPass = 'xxx';
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$dbName", $dbUser, $dbPass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
$STH = $DBH->prepare("SELECT * FROM `Admins` WHERE `username` = '$user_name' AND password='$password'");
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
$affected_rows = $STH->fetchColumn();
if($affected_rows == 1) {
//add the user to our session variables
$_SESSION['username'] = $user_name;
header("Location: http://www.mysite.com/administration/index.php");
exit;
//print 'allowed';
}
else {
print 'access is not allowed !!!';
}
Обновлено: Благодаря принятым ответ сильфона мой запрос кодируется в настоящее время, как этот
$STH = $DBH->prepare('SELECT * FROM Admins
WHERE username = :user and password = :pass');
$STH->execute(array(':user' => $_POST['user_name'],
':pass' => $_POST['password']));
Какой штраф. Теперь я просто хочу быть уверенным в том, что моя аутентификация достаточно хороша, чтобы использовать ее на страницах администратора, подобных этому session_start();
try {
$host = 'xx';
$dbName = 'xxxx';
$dbUser = 'xxxxx_first';
$dbPass = 'xxx';
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$dbName", $dbUser, $dbPass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
if (empty($_SESSION['username'])) {
die('To access pages you have to be loged in.
<a href="/administration/login.php">log in</a> ');
}
Вы используете https для отправки формы на сервер? – Gordon
возможно это помогает http://stackoverflow.com/questions/549/the-definitive-guide-to-forms-based-website-authentication – bescht
Я думаю, что вы храните пароли в виде обычного текста - вы должны их использовать, скажем, с SHA1. – halfer