-1
votes

Comment sécuriser la post-post-C # et PHP

J'ai des problèmes avec c #, php, mysqli. J'ai formé un formulaire pour le système de connexion et d'inscription avec


Ceci une simple fonction C # pour l'enregistrement de l'utilisateur.

Greffier IENumerator ( Nom de cordes, Nom d'utilisateur de chaîne, Email de chaîne, String Mot de passe ) { xxx

__ xxx

tout va bien, le code PHP fonctionne à.

Mais mon problème maintenant, que va arriver si les hackers obtiennent l'URL de la page d'enregistrement et se forment comme mon formulaire, comme mon formulaire et utilisez mon URL de page d'enregistrement et d'utiliser.

C'est mon problème, Ce problème va pirater les données de jeu comme (score, lecture totale, temps de jeu, autres données).

Alors, comment puis-je protéger et sécuriser (Demande postale) Dois-je faire quelque chose dans PHP ou C #. / p>


0 commentaires

3 Réponses :


-1
votes

Ajouter une authentification via une touche API! Vous pouvez faire cela comme avancé ou aussi simple que vous le souhaitez:

if ($_POST['apikey'] != "<the_api_key>")
    header('HTTP/1.0 403 Forbidden');


4 commentaires

Merci de me répondre. Mais je suis désolé de ne pas avoir compris ce que vous faites, j'ai déjà édité ma question et j'ai ajouté mon code PHP, pourriez-vous modifier le code pour moi juste pour que je comprends ce que vous entendez (touche API).


Si vous déployez directement votre C # -application de votre C # directement, ne recevez-vous pas plus de sécurité avec une touche API.


@ user6537157 Merci de répondre, mais des pirates peuvent décompresser les jeux d'unité et voir tout le code C # Son ok pour pirater mon jeu comme score, mais je n'aime pas faire dans PHP Link :(


@ M.ALI Oui Votre code peut toujours être réservé. Et c'est la raison pour laquelle l'apayée ne donne pas plus de sécurité.



-1
votes

Vous ne pouvez pas vous assurer que les pirates informatiques ne peuvent pas poster un faux score.

Vous pouvez essayer sur le côté serveur pour vérifier les données (comme "est ce score possible pour le temps joué?").
Ou vous pouvez le faire le plus aussi possible sur le côté serveur (votre application C # appelle votre backend PHP lorsque l'utilisateur démarre un jeu et renvoie une jeton (= chaîne aléatoire) et le temps de mesure).

et vous pouvez appliquer https sur le côté serveur.


0 commentaires

2
votes

En un coup d'œil, je peux identifier certaines faiblesses dans votre code:

  • vous n'utilisez pas https. Le trafic entre le client et le serveur pourrait être intercepté et vu en clair.
  • Vous n'utilisez pas de déclarations préparées. Tandis que real_scapape_string est probablement ok, sachez que: 1) il modifie les données. 2) Cela dépend du jeu de caractères configuré pour la connexion de la base de données (que vous ne semblez pas être réglage).
  • Vous ne validez pas l'enregistrement de l'utilisateur (c'est-à-dire envoyer un courrier électronique avec un code et l'attente de confirmer). Ce qui signifie qu'il est facile de créer beaucoup de faux comptes.

    Ce que vous demandez semble authentifier votre application sur le serveur. Le serveur ne sait pas si le client est valide (il pourrait s'agir d'un logiciel tiers en faisant les demandes), vous souhaitez donc trouver un moyen de vous assurer.

    Non, il n'y a aucun moyen de le faire. Non si l'utilisateur contrôle le client et peut inverser l'ingénieur.

    Fredrik Schön Réponse offre une solution utile dans un contexte différent. L'idée est qu'il y aura un "mot de passe" apkey qui identifie votre application et que le serveur vérifiera s'il est correct. Ceci est utile si je veux que deux applications se connectent ... Toutefois, lorsqu'une application est sur la machine utilisateur, celle-ci n'est pas sécurisée du tout.

    N'oubliez pas que votre client pourrait être modifié ou le apkéy volé, car il s'exécute sur la machine cliente.

    Vous pouvez ajouter une signature numérique au client (pour ajouter une vérification d'intégrité sur votre client, de sorte qu'elle peut vérifier qu'elle n'a pas été modifiée), mais cela peut également être contourné.

    Sur ce point, il s'agit de toutes les mesures d'atténuation. Il n'y a aucun moyen de le faire.

    pirater les données de jeu similaires (score, lecture totale, temps de jeu, autres données).

    Ne faites jamais confiance au client

    Il ne devrait y avoir aucune API pour les faire. Il ne devrait y avoir aucun moyen pour le client de définir le score (ou de définir une autre forme de récompense). Au lieu de cela, le client envoie events au serveur (ils peuvent être aussi granulés que l'une par entrée de l'utilisateur, c'est ce que vous ferez sur un jeu de serveur client multijoueur de toute façon) et le serveur décide du score , récompenses, etc.

    Je répète, il n'y aurait pas d'API. Il n'y aurait aucun moyen pour le client d'envoyer à quel point vous avez joué.

    Le retrait du processus est le seul moyen de vous garantir que vous avez supprimé un risque. Sinon, ce sont toutes les mesures d'atténuation.

    une recherche de anti-triche chez gamedev.stackexchange.com peut vous donner des idées.

    addendum :

    Le problème d'un Client de jeu qui accède à un formulaire Web et à un utilisateur malveillant qui crée un client personnalisé qui accède à la même forme ... n'est pas fondamentalement différent du problème de A Navigateur Web qui accède à un formulaire Web et à un utilisateur malveillant qui crée un client personnalisé qui accède au même formulaire. Toutes les mesures de sécurité côté serveur pour le Web s'appliquent au jeu. Et veuillez noter que fonder cette sécurité sur un navigateur particulier n'est pas une bonne idée.

    Ce que nous voulons, c'est de ne pas empêcher la création du client personnalisé tiers, ni de la rendre inutile. Au lieu de vous assurer qu'il peut au mieux faire les mêmes choses que le client légitime peut faire.

    Il y a une API entre le client et le serveur. S'il y a quelque chose dans cette API qui permet au client de faire quelque chose que le client ne doit pas faire (par exemple définir un faux score), puis le serveur et son API doivent être retravaçus de manière à ce qu'il ne soit pas possible.


5 commentaires

Merci beaucoup @Teraot pour cette réponse. Je peux vous comprendre, mais ce n'est pas mon code actuel :) Mon code actuel est très long code, je viens d'écrire ce code pour ces questions. Mon problème est, aujourd'hui, j'ai trouvé un outil appelé (Devxunity-Descacker Magic Tools) Cet outil déballera le personnel du jeu Unity comme Code :( pour que le pirate informatique puisse afficher tout mon code, ils trouveront le lien de registraire < i> ( localhost / registrar.php ) ou autre lien comme l'insertion de données de score, afin qu'ils puissent donc Faites une forme propre et utilisez mon code comme l'insertion de données de score. Son ok si Tay pirater mon score, mais je n'aime pas utiliser les liens PHP.


@ M.ALI PHP n'est pas intrinsèquement insécurité - malgré ce que certains pourraient dire - mais il n'est pas sécurisé par défaut non plus. Si vous ne souhaitez pas d'insérer un client rouge, n'offrez pas cela sur l'API du serveur. Le client ne doit indiquer que le serveur ce que l'utilisateur fait, et le serveur doit calculer la quantité de score que la récompense, la mise à jour et l'envoyer au client. À aucun moment, une option du client doit indiquer au serveur la quantité de score que vous obtenez, que l'API ne doit pas exister.


@ M.ALI Vous me donnez l'impression que vous craignez que le pirate informatique modifie votre PHP d'une manière ou d'une autre. Je suppose que le code PHP est dans un serveur distant. Pas dans le jeu Unity, pas dans la machine cliente. Lorsque le pirate informatique ne peut pas le voir, ni le modifier, à moins que le serveur ne soit vulnérable par d'autres moyens. Et cela devrait être, si c'est PHP ou non.


Désolé si je te dérange monsieur monsieur, mais comment la dose d'appel de devoir ou d'autres grands jeux enregistre des données. Vous savez pourquoi je suis plateau ceci. Parce que je veux enregistrer et charger leurs données lorsque le joueur supprimer le jeu sur leur téléphone et réinstaller le jeu Agin.


@ M.ALI sur le serveur, bien sûr. Je ne suggère pas de n'avoir aucun serveur. Il suffit de ne pas avoir de serveur avec l'option d'un client (légitime ou non) de le dire des récompenses (score, et al). Tous ceux qui doivent être décidés par le serveur. J'ai passé plus de longueur sur ce sujet à Comment puis-je éviter les utilisateurs pirater mes jeux de réseau auprès du client? , vous pouvez également vous intéresser à L'état qui est synchronisé lorsqu'une fenêtre est cassée dans un jeu FPS (vous allez Trouvez des liens qui vont plus de détails là-bas).