J'ai récemment écrit un serveur socket en PHP qui va gérer la communication entre une application de téléphone Android et mon serveur web PHP. Étant donné qu'Android ne prend pas en charge de manière native les notifications de style push, nous allons utiliser notre serveur Web comme couche de middleware pour gérer nos «push».PHP Socket Server (pour les notifications Push Android) - Sécurité/Authentification Problème
Le serveur de socket est stable, fonctionne bien et semble évoluer correctement. Bien que je voudrais finalement réécrire cela en C je n'ai pas les compétences nécessaires pour le faire maintenant, je vais rester en PHP pendant au moins un court moment. À partir de ce moment, notre émulateur Android est capable de communiquer via le serveur, d'obtenir des poussées, etc. afin que toute la partie soit couverte. Ce qui m'inquiète, c'est que tout le monde peut ouvrir une socket sur mon serveur et recevoir une connexion client. Même si nous ne transmettons pas de données sensibles, je ne veux pas permettre à quiconque de se connecter et de recevoir des informations diffusées, de gaspiller mes ressources et d'encombrer mon serveur en général.
La question est, comment puis-je sécuriser un serveur comme celui-ci? Supposons que je cours sur le port 25 000. Puis-je installer une sorte de couche SSL sur ce port et attendre des appareils comme l'Android pour pouvoir communiquer sur ce port sans protocoles spéciaux ou sauter par des cerceaux? J'ai envisagé de demander aux clients qui se connectent d'authentifier leur utilisateur par rapport à notre base de données utilisateur avant de recevoir une connexion client, mais cela nécessiterait le transfert d'informations en texte brut sur le réseau, ce que je ne suis pas sur le point de faire. Toutes les suggestions sur ce serait très utile - je suis plutôt nouveau à la communication TCP directe de PHP et me sens comme je pourrais juste manquer quelque chose de simple qui permet l'authentification à ce niveau. Informations complémentaires: Si je peux obtenir un nom d'utilisateur et un mot de passe valides, j'utiliserais MySQL pour valider l'utilisateur, puis accepter/refuser sa connexion en fonction des résultats de la requête.
Merci à l'avance ..
Oh oui, je gère plusieurs clients sans aucun problème pour le moment, donc cette partie est couverte. Je vais jeter un oeil à Stunnel et voir à quoi ça ressemble. Je ne suis pas sûr comment je peux utiliser seulement l'interface locale pour des connexions SAUF si stunnel manipule d'une manière ou d'une autre les connexions entrantes au serveur - plus de recherche répondra que cela ressemble. – Shane
@angry Oui, c'est ce que fait stunnel. Il relaie le trafic entrant après le décryptage et crypte le trafic sortant. – Artefacto