Cela fait donc un moment que je teste différentes approches AJAX pour envoyer des données à un serveur qui seront traitées et stockées dans une base de données MySQL.
La page consultée par la demande AJAX api.php
utilise les instructions préparées par PDO de PHP pour enregistrer les données. Les injections MySQL ne posent donc pas vraiment de problème et les mots de passe ou les données à chiffrer sont également gérés par api.php
qui n'est pas t ce que je demande ici. Ma question concerne davantage la sécurité des données lors de leur transfert du client au serveur.
J'ai actuellement (pour l'exemple de connexion que j'ai inclus ci-dessous):
login.php
et api.php
dans cet exemple). .api.php
lors de l'accès aux fonctions.api.php
.api.php
(non pertinent pour la question).Enfin, mes questions sont:
Je comprends que tout le monde a des approches différentes pour gérer les données de leur site et les transporter. Je comprends également que, quoi que vous fassiez, vous ne pouvez jamais être protégé à 100%, car il peut y avoir des vulnérabilités et des failles autour de votre système que vous ne pouvez pas prendre en compte. Je recherche des retours/améliorations sur mon approche générale pour l'envoi de données en toute sécurité plutôt que des critiques du code spécifique ci-dessous, car il ne s'agit que d'un exemple. Mais toute réponse constructive est la bienvenue. Merci d'avoir pris le temps de lire/répondre.
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"
});
}
Réponse courte: vous ne pouvez pas protéger votre côté client.
Longue réponse:
Vous ne pouvez rien faire pour que le navigateur prouve qu'il s'agit bien de votre code javascript qui s'exécute côté client . Ensuite, l'action évidente à entreprendre est la plus simple: NEVER TRUST USER INPUT.
Cela signifie, comme vous avez commencé à le faire, sécuriser votre côté serveur en utilisant session, limitation de débit, validation des données, fail2ban (bannissement de l'adresse IP d'un client après un certain nombre d'échecs), surveillance des journaux ...
le meilleur moyen est toujours de sécuriser le côté serveur et si j’étais un utilisateur connecté au site, je serais également en mesure de vérifier le jeton CSRF sur ma balise META et de forger un script sur le serveur. Donc, le pari sûr est la validation côté serveur