Sécurité et optimisation côté serveur

Ajax

a marqué ce sujet comme résolu.

Bonjour,

Je suis en train de créer un réseau social un peu à la Facebook pour m’entraîner. Le concept est simple, j’ai un espace membre avec des utilisateurs qui peuvent se suivre. Ensuite il y a un thread principale ou l’on peut visualiser tous les posts des membres que l’on suit (comme Facebook en gros sauf qu’à la place d’amis ce sont des follows comme sur twitter).

J’ai utilisé Ajax afin que le thread principale affiche les nouveaux posts sans avoir besoin de recharger la page. Mon implémentation fonctionne parfaitement néanmoins je suis sceptique. Voilà comme je procède :

  • j’ai une page post.php dans laquelle il y a deux fonctions : getPost() et postPost(). La première permet de récupérer tous les posts des utilisateurs qu’on follow, et la deuxième permet de poster un post. L’appel de ces deux fonctions se fait à l’aide d’un GET. Si on appelle post.php?getpost=truealors on appelle la fonction getPost()sinon on appelle l’autre fonction.

  • Maintenant j’ai une page post.js qui appelle les deux fonctions getPost()et postPost() de la page post.php. J’utilise l’objet XMLHttpRequestet j’appelle XHR.open("GET", "post.php?getpost=true") si je veux appeler getPost() et XHR.open("POST", "post.php") si je veux appeler `postPost()``

Tout fonctionne très bien néanmoins je me demande si il n’y a pas des problèmes de sécurité avec cette implémentation ? Je ne serai pas dire quoi, mais j’ai l’impression qu’utiliser un paramètre GET peut permettre à l’utilisateur malicieux de faire n’importe quoi, d’accéder à la page post.php qui peut-être constitue un problème.

Le deuxième problème que j’ai c’est que dans mon fichier .js je fais à la fin const interval = window.setInterval(getSearchResult, 100); mais du coup si il y a plein d’utilisateurs le serveur va être complètement dépassé non ? Y a t-il une autre solution qu’utiliser cette fonction ? Par exemple c’est au serveur de dire au client quand il y a un nouveau post, au lieu que ça soit toujours à moi de demander si de nouveaux posts sont apparues.

J’espère que mes problèmes sont clairs :)

Merci beaucoup.

Tu pourrais séparer ces deux fonctionnalités dans deux fichiers séparément, ou du moins deux addresses séparées (je ne sais pas si tu utilises un système d’adressage ou non). Par exemple, si l’envoi d’un post se fait uniquement via API, tu pourrais le mettre sur une addresse /api/post.

En ce qui concerne la sécurité, le plus évident ici serait l’injection de code. Tu dois avoir un moyen d’échapper le texte qui t’est envoyé afin qu’il ne soit interprété ni par ton serveur, ni par les clients qui iront le lire plus tard.

(note que je ne sais pas faire ça, personnellement, je me contente d’utiliser un framework qui sait très bien le faire)

+0 -0

Pour que ce soit le serveur qui informe les clients de nouveaux posts, tu pourrais te tourner vers les websockets. Il est tout à fait possible d’implémenter ça en PHP côté serveur, même si c’est un peu plus compliqué qu’en utilisant AJAX.

Ceci dit, si tu veux supporter les vieux navigateurs (qui supporteraient AJAX mais pas les websockets), tu devrais garder les 2 implémentations. Et là, pour réduire la charge sur le serveur, il n’y a pas de magie : tu devrais peut-être limiter ton intervalle de récupération à 1 ou 2s, d’autant que je ne crois pas que 10x/s soit particulièrement utile.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte