Насколько безопасен этот метод входа в AJAX?
Я строю форму входа, используя ajax php и MySql.
Я провел большую часть исследований, и мне не нравилось много постов, найденных в Интернете, поэтому я создал приведенный ниже код.
Мой вопрос, это вообще безопасно? Я не использую хеширование, и я не уверен, как это будет сделано с ajax. Все примеры очень ценятся
index.php
<script>
$(document).ready(function(){
$('form[name=loginForm]').submit(function() {
$.post('ajax.php', { username: $('[name=username]').val(),
password: $('[name=password]').val()},
function(data){
if(data.success){
alert('welcome');
}else{
alert("incorrect");
}
}, 'json');
return false;
});
});
</script>
ajax.php
<?php
if($_POST){
/** Fetch data from mysql **/
$u = $_POST['username'];
$p = $_POST['password'];
$sql = "SELECT * FROM users WHERE username='$u' AND password='$p' ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$_SESSION['userid'] = $row["username"];
$_SESSION['userid'] = $row["username"];
$data['success'] = true;
}
}
else
{
$data['success'] = false;
}
/** Fetch data from mysql **/
echo json_encode($data);
} ?>
БОЛЬШОЕ СПАСИБО
1 ответ
Мой вопрос, это вообще безопасно?
Нет, это не безопасно.
Я не использую хеширование, и я не уверен, как это будет сделано с ajax.
Аутентификация на самом деле не может быть выполнена с помощью AJAX. С уважением ты лаешь не на то дерево.
Начните с чтения этой части руководства по PHP. http://php.net/manual/en/faq.passwords.php Читайте сейчас. Будем ждать
Добро пожаловать. Вы никогда не должны помещать свой простой текстовый пароль в базу данных. Если вы не уверены, почему это так, прочитайте о "нарушении данных Эшли Мэдисон" онлайн или посетите веб-сайт https://haveibeenpwned.com/
Вы хотите, чтобы киберпреступнику, который крадет вашу пользовательскую таблицу, было как можно сложнее угадывать пароли ваших пользователей. Если вы храните их как текст, угадать их тривиально.
Допустим, ваши пользователи уже зарегистрированы. Смысл аутентификации вашего пароля заключается в
- получить имя пользователя и пароль от пользователя.
- найдите пользователя по имени в вашей базе данных, вернув хешированный пароль.
- Сравните хешированный пароль в вашей базе данных с тем, который вы собрали у пользователя. РНР
password_verify()
функция делает это хорошо. - если проверка не пройдена, откажитесь от информации пользователя. Не давайте им никаких намеков на то, что было не так. Просто скажите им: "Ваш логин не пройден". Вы не хотите говорить им "вы дали правильное имя пользователя, но неверный пароль".
- если проверка прошла успешно, вы создаете сеанс для этого пользователя, чтобы он мог продолжать использовать другие страницы в вашем веб-приложении без повторного входа в систему. Читайте о сессиях php здесь.
- Вы используете идентификатор сеанса для представления сеанса. Идентификатор сеанса - это трудно угадываемый токен данных с ограниченным временем жизни. PHP предлагает
session_create_id()
метод для этого. - Вы помещаете этот идентификатор сессии в файл cookie и возвращаете его в свой браузер. Вы не можете надежно передавать куки в браузеры с AJAX, поэтому ваша стратегия аутентификации не будет работать.
- Последующие запросы к вашему веб-приложению представляют идентификатор сеанса в файле cookie. Вы проверяете его, чтобы убедиться, что он действителен и не истек тайм-аут. Затем вы делаете то, что пользователь просит вас сделать.