Проблема
Итак, какое-то время я экспериментировал с различными подходами AJAX при отправке данных на сервер, который будет обрабатываться и храниться в базе данных MySQL.
Страница, на которую обращается запрос AJAX api.php
, использует подготовленные заявления PHP PDO для сохранения данных, поэтому MySQL-инъекции на самом деле не проблема, и пароли или данные, которые необходимо зашифровать, также обрабатываются api.php
что я не прошу здесь. Мой вопрос больше связан с тем, как обеспечить безопасность данных при передаче с клиента на сервер.
Подходы
В настоящее время у меня (для примера входа в систему, который я привел ниже):
- SSL Cert/HTTPS, работающий в домене.
- Определенный запрос AJAX (очевидно, не этот пример запроса на вход, так как нет сеанса для начала) будет работать, только если PHP-сессия действительна на сайте (используется в
login.php
иapi.php
в этом примере). - Ограничение скорости при
api.php
при доступе к функциям. - PHP PDO подготовил операторы при взаимодействии с базой данных внутри
api.php
. - Шифрует конфиденциальные данные внутри
api.php
(не относится к вопросу).
Вопросы
Наконец, мои вопросы:
- Является ли такой подход к использованию асинхронных HTTP-запросов (Ajax) достаточно безопасным для использования, а не просто отправкой данных на страницу PHP и перенаправлением вперед? (Так как этот способ улучшает работу пользователя).
- Как я могу проверить, что данные, которые мой пользователь отправляет, не были изменены?
- Я достаточно делаю достаточно для защиты своих пользовательских данных, если нет, что еще я могу сделать?
Пример
Я понимаю, что у каждого есть разные подходы к обработке данных своих сайтов и транспортировке этих данных. Я также понимаю, что независимо от того, что вы делаете, вы никогда не можете быть защищены на 100%, так как могут быть уязвимости и способы вашей системы, которые вы не можете учитывать. Я ищу отзывы и улучшения в моем общем подходе при отправке данных безопасно, а не в критику конкретного кода ниже, поскольку это всего лишь пример. Но любые конструктивные ответы приветствуются. Спасибо, что нашли время, чтобы прочитать/ответить.
function loginUser() {
var process = "loginUser";
var data = $("form").serializeArray();
data[1].value = SHA512(data[1].value); // sha then encrypt on api.php page
data = JSON.stringify(data);
$("#loginButton").html('<i class="fa fa-spinner fa-pulse fa-lg fa-fw"></i> Login');
$.ajax({
type: "POST",
url: "api.php",
data: {"process": process, "data": data},
success: function(data) {
if (data.response.state == "success") {
// if api.php returns success, redirect to homepage
} else {
// if api.php returns failure, display error
}
},
error: function(jqXHR, textStatus, errorThrown, data) {
// error handling
},
dataType: "json"
});
}