Comment envoyer sécuriser les requêtes AJAX avec PHP et jQuery

Le problème

Donc, pour un certain temps maintenant, j'ai fait des expériences avec différents AJAX approches dans l'envoi de données à un serveur qui seront traitées et stockées dans une base de données MySQL.

La page de la requête AJAX hits api.php, utilise PHP PDO préparées pour enregistrer les données, MySQL injections ne sont pas vraiment un problème et que les mots de passe ou des données qui doivent être chiffrées sont également traitées par api.php ce qui n'est pas ce que je demande ici. Ma question porte davantage sur la façon d'assurer la sécurité des données lors du transfert à partir du client vers le serveur.

Les approches

J'ai actuellement (pour la connexion exemple, j'ai inclus ci-dessous):

  • Certificat SSL/HTTPS en cours d'exécution sur le domaine.
  • Certains requête AJAX (évidemment pas à cette demande de connexion exemple qu'il n'y a pas de session pour commencer) ne fonctionnera que si la Session PHP est valable sur tout le site (utilisé sur les deux login.php et api.php dans cet exemple).
  • La limitation du débit sur api.php lors de l'accès aux fonctions.
  • PHP PDO préparées lors de l'interaction avec la base de données à l'intérieur de api.php.
  • Le cryptage des données sensibles à l'intérieur de api.php (pas pertinente pour la question).

Les questions

Enfin, mes questions sont les suivantes:

  1. Est cette approche à l'aide de HTTP asynchrones (Ajax) les demandes suffisamment en sécurité pour l'utilisation, plutôt que de simplement transmettre des données à une page PHP et la redirection de partir? (Ce qui améliore l'expérience de l'utilisateur).
  2. Comment puis-je vérifier pour savoir que les données de mon utilisateur l'envoi n'a pas été altéré?
  3. Suis-je raisonnablement faire assez pour protéger mes données de l'utilisateur, sinon, que puis-je faire?

L'exemple

Je comprends que tout le monde a différentes approches de la gestion de leurs données du site et le transport de données. Je comprends aussi que peu importe ce que vous faites, vous ne pouvez jamais être protégé à 100%, il y a peut-être des vulnérabilités et des moyens autour de votre système que vous ne pouvez pas le prendre en compte. Je suis à la recherche de commentaires, améliorations sur mon approche générale dans l'envoi de données en toute sécurité plutôt que critique de la spécifique de code ci-dessous n'est qu'un exemple. Mais toutes les réponses constructives sont les bienvenus. Merci de prendre le temps de lire/réponse.

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"
    });
}
  • 1. oui 2. le SHA512 est mignon, mais si quelqu'un peut modifier les données en transit, ils peuvent mettre à jour la table de hachage aussi, donc ne vous embêtez pas avec elle. 3. utiliser https pour assurer l'intégrité
InformationsquelleAutor Luke Brown | 2016-06-19