Au cours des dernières années, en tant que langage indépendant de la plate-forme, JavaScript a trouvé de nombreuses utilisations, allant des applications mobiles aux jeux basés sur HTML5 et aux serveurs Node.js. L'époque où vous utilisiez JavaScript uniquement pour les effets spéciaux et la validation de formulaire est révolue.
Ce développement convient aux développeurs et aux utilisateurs, qui bénéficient de mises à jour plus rapides de leurs applications, quelle que soit la plate-forme sur laquelle ils se trouvent..
Mais cela soulève aussi des questions sur la sécurité.
Comment pouvons-nous nous assurer que nos applications fonctionnent comme prévu? Comment pouvons-nous appliquer nos licences? Et qu'en est-il du piratage?
Dans ce didacticiel, nous examinerons les menaces les plus courantes pour vos applications JavaScript et comment vous pouvez vous protéger contre celles-ci. Nous examinerons également les étapes à suivre pour intégrer Jscrambler 4.0 à votre flux de travail de développement afin de sécuriser facilement vos applications JavaScript..
Étant donné que JavaScript est principalement utilisé en ligne, le point de départ naturel est la connectivité entre l'application exécutée sur les appareils de vos utilisateurs et votre serveur..
Tout d’abord, laissez-moi régler ceci: Peu importe la qualité de la protection que vous ajoutez du côté client, vous devez toujours partir du principe que le client peut être compromis.. Certains vont jusqu'à dire que vous devez traiter le client comme malveillant..
Fondamentalement, la raison en est que, quelle que soit la qualité de la sécurité de votre client, la communication HTTP entre le client JavaScript et votre serveur peut toujours être altérée, à l'aide d'outils de recherche de demandes ou même de clients personnalisés utilisant votre protocoles du serveur.
Ainsi, si votre application communique avec un serveur, avant d'ajouter toute autre forme de sécurité côté client, commencez par sécuriser votre serveur autant que possible, comme vous le feriez avec une interface HTML classique..
Vous pouvez penser à sécuriser votre serveur à travers deux concepts: intégrité des données et confidentialité des données..
Intégrité des données signifie que les données de votre application doivent rester précises et cohérentes tout au long de son cycle de vie. Confidentialité des données signifie que les données de vos utilisateurs doivent rester sécurisées et que des tiers ne doivent jamais y accéder.
Bien que vous deviez déjà effectuer la validation des paramètres dans le client JavaScript, cela n'empêchera pas les pirates informatiques d'envoyer des données mal formées ou même malveillantes à votre serveur. Après tout, quelqu'un qui cherche à casser votre serveur n'utilisera probablement même pas votre interface utilisateur!
Ainsi, lorsque vous travaillez avec une application JavaScript, toutes les validations habituelles côté serveur, depuis l'échappement de caractères HTML jusqu'à la vérification que les attributs sont du type correct, s'appliquent toujours..
Parfois, les données envoyées sont correctement formatées mais n'ont pas de sens dans l'état de l'application, par exemple lorsqu'un joueur envoie un score incroyablement élevé. Vous pouvez protéger votre serveur contre de telles situations en utilisant des contrôles de cohérence et en plaçant autant de logique que possible de l'application sur le serveur..
Une autre partie de la sécurisation de la communication client-serveur est de s'assurer que toutes les données spécifiques à l'utilisateur restent confidentielles et accessibles uniquement à l'utilisateur autorisé..
La première étape consiste à utiliser le protocole SSL dans toutes les communications entre votre client JavaScript et votre serveur afin d’empêcher les utilisateurs d’Internet d’espionner les données transmises entre les deux..
Ensuite, vous devrez valider que les demandes proviennent effectivement du bon utilisateur. Les détails pour savoir comment faire cela dépendent de votre application. Dans les applications Web, les nonces sont une technique utile, alors que dans le contexte d'un jeu, l'authentification OAuth pourrait être une approche plus naturelle..
N'oubliez jamais que vous ne devez jamais stocker d'informations confidentielles telles que des mots de passe ou des clés d'API dans votre client. C'est une bonne idée de considérer votre serveur comme une API pouvant être utilisée par le client JavaScript mais également par d'autres clients sur Internet..
Bien que les vérifications mentionnées ci-dessus s’appliquent à tous les types d’applications, certaines vérifications deviennent difficiles à effectuer lorsque le client est plus complexe..
Dans les jeux multijoueurs, par exemple, l'exécution de toute la logique sur votre serveur fonctionnera bien tant que le jeu est simple et que vous ne disposez que d'un nombre limité de joueurs. Mais à mesure que la base d'utilisateurs actifs s'accroît, la charge sur le serveur vous incite à envisager la possibilité de transférer une partie du traitement sur le client. Il en va de même si la logique de votre jeu est si complexe que sa simulation sur le serveur prendrait beaucoup de ressources..
C'est là que les limites s'estompent.
Bien que l'idée de ne jamais faire confiance au client sonne bien, en pratique, vous devrez définir un seuil, en indiquant "c'est à quel point je fais confiance à mon client" et en ne vérifiant que l'intégrité du serveur. Si certaines actions du joueur affectent également d'autres joueurs, vous devez impliquer davantage le serveur, laissant ainsi aux utilisateurs les endroits où l'utilisateur ne peut nuire qu'à sa propre expérience..
Et que dire des nombreux cas d'utilisation de JavaScript dans lesquels vous n'avez pas de serveur ou dans lesquels placer la logique de l'application sur le serveur n'a pas de sens, tels que les applications mobiles, les lecteurs de flux HTML5 et les applications cartographiques?
Enfin, il convient de garder à l’esprit que, quel que soit le degré de sécurité de votre serveur, votre client JavaScript est toujours exposé. Donc, à moins que vous n'y ajoutiez une sorte de protection, il est très facile pour un attaquant (Man-in-the-Browser ou les attaques d'exfiltration de données, par exemple) d'accéder aux données sensibles ou de modifier l'expérience de l'utilisateur..
En tant que langage dynamique, JavaScript peut être modifié dans le navigateur à l'aide d'outils de base tels que le débogueur intégré du navigateur. Si vous savez ce que vous faites, vous pouvez remplacer des parties du code et changer le comportement de l'application à la volée..
Comme nous l'avons vu ci-dessus, vous devez vous assurer que des données non valides ne parviennent jamais à la base de données sur votre serveur. Mais certains changements sont plus restreints que cela. Un plugin de protection contre les logiciels malveillants peut ajouter de nouveaux boutons à votre application pour attirer l'utilisateur sur un site externe. Ou l'utilisateur peut pirater le client pour voir plus du jeu sans y jouer.
Des changements comme celui-ci n'affecteront pas l'ensemble de votre application, mais ils modifieront la façon dont l'utilisateur le ressent. Dans le cas des logiciels malveillants, cela peut également constituer une menace sérieuse pour la vie privée de l'utilisateur..
Comme JavaScript est un langage interprété, il est impossible de l’empêcher complètement. Un pirate informatique dédié trouvera toujours le moyen de surmonter les obstacles, tout comme un cambrioleur peut casser n'importe quel verrou. Mais nous pouvons faire en sorte que la plupart des utilisateurs utilisent des méthodes appropriées (par exemple, améliorer leur jeu) plutôt que de pirater l'application..
C’est là que Jscrambler peut vous aider.
Jscrambler est une plate-forme de sécurité JavaScript qui vise à garantir que les applications JavaScript sont exécutées comme elles ont été développées..
Pour essayer Jscrambler, visitez sa page d'accueil et inscrivez-vous pour un essai gratuit. Si vous trouvez qu'il répond à vos attentes, vous pourrez choisir plus tard l'un de ses plans payants..
Une fois connecté, s'il y a un texte disant "Une nouvelle version de Jscrambler est maintenant disponible" en haut de la page, cela signifie que vous voyez toujours l'ancienne version. Cliquer sur Essayez-le maintenant.
Jscrambler 4 organise votre travail dans des applications, chacune pouvant contenir un ou plusieurs fichiers JavaScript. Ensuite, vous verrez l'écran de sélection de l'application sur laquelle travailler..
Si vous souhaitez tester la fonctionnalité à l'aide d'une application JavaScript de votre choix, cliquez sur Créer une application.
Pour l'instant, cependant, choisissons Cour de récréation. Dans ce mode, vous pourrez essayer toutes les transformations sur un exemple de script, tandis que les transformations que vous pouvez appliquer à votre application réelle sont limitées par votre niveau d'abonnement..
A gauche, vous verrez le Arbre de fichiers, une liste des fichiers de votre application et un Ajouter bouton pour importer ou créer de nouveaux fichiers. Dans la cour de récréation, le bouton Ajouter est désactivé.
Sur la droite, il y a un menu pour choisir le Spécifications linguistiques et Mode d'application pour votre application. Jscrambler les utilise pour s'assurer que le code transformé fonctionnera dans l'environnement sélectionné, en tenant compte de ses limites et de ses possibilités..
Nous allons maintenant avec ES5 et une base Application de navigateur Web.
Cliquez sur le nom du fichier (clock.js
) pour commencer à travailler dessus.
Le contenu du fichier sera affiché au milieu de l'écran: le code source à gauche et la version transformée par Jscrambler à droite.
Ensuite, sélectionnez le Transformations de code onglet à droite pour afficher une liste des transformations disponibles. Jscrambler vous permet de choisir les transformations que vous trouvez pertinentes pour votre code. Vous pouvez même utiliser des annotations dans votre code pour changer la façon dont certains de ces codes sont transformés. Cela peut être pratique dans les blocs de code critiques pour la performance, par exemple les fonctions de rendu dans les jeux.
Pour tester les transformations, sélectionnez-les une à la fois. Puis cliquez sur Protéger App au bas de la fenêtre pour créer une nouvelle version de votre code transformé.
À côté du bouton, vous verrez un compteur présentant les effets de ces modifications sur votre code JavaScript..
Dans le lecteur, vous verrez trois icônes représentant le coût, la résilience et la puissance (de gauche à droite dans la capture d'écran ci-dessus) des transformations que vous avez sélectionnées pour votre application..
Pour commencer, cochez la case devant Flux de contrôle, puis cliquez sur Protéger App.
le Ajustement du flux de contrôle est l'une des nouvelles transformations puissantes ajoutées à Jscrambler 4. Elle aplatit le flux de contrôle du script, de sorte qu'il devient difficile pour une personne qui lit le code de suivre la logique de votre application..
Ensuite, continuez en sélectionnant quelques options supplémentaires d’obscurcissement. Au fur et à mesure que vous en rajouterez, vous remarquerez que votre code devient de plus en plus difficile à lire - et donc à éditer sans casser ses fonctionnalités..
De plus, lorsque vous cliquez sur Protéger App encore une fois, même sans changer les paramètres, vous remarquerez que le contenu du script protégé change à chaque fois.
Les transformations de Jscrambler sont polymorphe, en vous assurant que les transformations produisent une sortie différente à chaque fois. De cette façon, même si quelqu'un était capable de pirater la version actuelle, la prochaine fois que vous exécuterez votre code avec Jscrambler, ces modifications ne fonctionneraient plus..
Jusqu'à présent, nous avons discuté des moyens de vous assurer que votre application fonctionne comme prévu en empêchant à la fois l'utilisateur et les tiers de modifier votre code source. Mais ce n’est pas la seule menace pour votre application qui doit vous préoccuper..
Dans la mesure où JavaScript est devenu populaire dans les applications autonomes et mobiles, le piratage est devenu un véritable problème, y compris dans ce domaine..
Je suis sûr que nous avons tous cliqué "Voir la source" apprendre à créer un nouvel effet ou une astuce sympa et à adapter ce que nous avons appris à nos sites Web. Ce n'est pas ce que je parle ici.
Supposons plutôt que vous ayez créé un jeu mobile populaire en HTML5 et JavaScript. Grâce à la portabilité de JavaScript, vous pouvez utiliser le même code sur Android, iOS et d'autres plates-formes, et atteindre un public plus large sans le travail supplémentaire lié à l'écriture de versions natives pour chaque environnement. Mais il y a un problème: tout le monde peut copier votre code JavaScript, y apporter quelques modifications et le vendre comme tel.!
Les transformations de l'étape précédente permettent d'éviter cela en rendant le code difficile à lire et en procédant à un reverse engineering. En plus d’eux, Jscrambler ajoute des pièges à code, une fonctionnalité qui permet au code de se protéger.
Jetons un coup d'oeil à certains d'entre eux.
Dans Jscrambler, dans la liste des transformations, vous trouverez une section intitulée Serrures à code.
Les transformations de cette section ajoutent une couche de sécurité supplémentaire à votre application JavaScript..
En les utilisant, vous pouvez limiter l’exécution de votre code à un ensemble donné de navigateurs, à une période (utile pour les démos qui ne devraient pas pouvoir être exécutées une fois la période de prévisualisation terminée), à un domaine donné (généralement le vôtre) et à une système d'exploitation particulier.
Une fonctionnalité plus puissante pour protéger votre code est côté client. RÂPE (Autoprotection d’application d’exécution). Il modifie votre code JavaScript, le forçant à se défendre contre toute altération à l'exécution. Par exemple, l'application cessera de fonctionner si quelqu'un essaie d'ouvrir le débogueur.
Enfin, dans le Optimisation section, sélectionnez Minification pour réduire le code et réduire la taille du fichier.
Ensuite, cliquez sur Protéger App, suivi par Télécharger l'application pour télécharger le code source et l'utiliser dans votre application.
Jscrambler conserve l'historique de votre transformation, vous pouvez donc toujours revenir à une version antérieure..
Comme nous l'avons vu, la configuration de votre niveau de protection en sélectionnant les cases à cocher une par une est simple. Mais vous pouvez toujours accélérer votre flux de travail en regroupant vos combinaisons de transformations courantes dans des modèles..
Une fois que vous avez trouvé un ensemble de transformations que vous souhaitez stocker pour une utilisation ultérieure, cliquez sur Créer un modèle au bas de la Paramètres de l'application section.
Jscrambler vous invitera à donner un nom et une description à votre modèle..
Tapez quelque chose de descriptif pour le futur, et cliquez sur Enregistrer le modèle.
Vous pouvez également utiliser l’un des modèles déjà disponibles sur le Vos modèles languette:
Déplacez le pointeur de votre souris au-dessus des noms de modèles pour en savoir plus sur eux et comprendre quand ils ont un sens. Puis cliquez dessus pour voir quelles transformations ils appliquent à votre code.
Jusqu'à présent, Jscrambler peut vous aider à protéger votre application à l'aide de l'interface Web. Bien que l'interface soit intuitive, à mesure que votre application se développe, vous souhaiterez quelque chose de plus simple..
En outre, comme je l’ai mentionné précédemment, Jscrambler est polymorphe et génère une sortie différente à chaque fois. Il est donc utile de réexécuter l’outil de temps en temps, même s’il n’ya aucun changement dans les fichiers spécifiques..
Pour ce faire, regardons l'outil de ligne de commande de Jscrambler.
Tout d'abord, téléchargez et installez l'outil de ligne de commande à l'aide de npm. Sur votre ligne de commande, tapez:
sudo npm installer -g jscrambler
Une fois l’installation terminée, revenez à vos applications dans l’administrateur Jscrambler..
Notez que pour utiliser l'outil de ligne de commande, vous devez utiliser une application réelle au lieu du script de jeu. Donc, si vous n'avez pas encore d'application, créez-en une maintenant.
Après avoir sélectionné les transformations que vous souhaitez appliquer, cliquez sur le bouton de téléchargement dans le coin supérieur droit de la page. Cela téléchargera vos paramètres sur votre ordinateur sous forme de fichier JSON..
Copiez le fichier JSON dans votre projet. Ne le commettez pas dans le contrôle de version car le fichier contient votre clé API et le secret d'utilisation de l'API Jscrambler..
Ensuite, lancez le jscrambler
commande pour exécuter les transformations sur vos fichiers JavaScript.
Par exemple, si vous n'avez qu'un seul fichier, test.js
, vous pouvez exécuter la commande suivante:
$ jscrambler -c jscrambler.json -o test.protected.js test.js
Dans la commande, vous avez transmis le fichier JSON contenant les paramètres de votre application à l'aide du -c
paramètre suivi du fichier de sortie (-o test.protected.js
), et enfin le fichier JavaScript à protéger.
Pour exécuter la protection de tous les fichiers JavaScript dans le répertoire du projet, vous pouvez utiliser quelque chose comme ceci:
$ jscrambler -c jscrambler.json -o protected / ** / *. js
Dans cet exemple, au lieu d’un fichier de sortie, vous définissez un répertoire (protégé
) où Jscrambler placera les résultats de la protection.
Désormais, vous n'avez plus besoin de revenir à l'interface Web de Jscrambler chaque fois que vous modifiez vos fichiers JavaScript. Cela rendra plus probable que vous vous souveniez de l'étape, et ainsi sécuriserez votre application..
Comme amélioration supplémentaire, vous pouvez également configurer la tâche Jscrambler pour qu'elle s'exécute chaque fois que vos scripts changent, par exemple à l'aide de Grunt. Ou cela pourrait même être une tâche sur votre serveur d'intégration continue, qui s'exécute chaque fois qu'une nouvelle version du code est validée.
Jscrambler fournit des outils de pointe empêchant les pirates, les tricheurs et les malwares d'injecter des fonctionnalités indésirables dans votre application ou de modifier les variables de votre application. Cela empêche également les autres utilisateurs de copier votre code et de le redistribuer comme leur propre fichier..
La sécurité est un domaine complexe comportant de nombreuses menaces différentes à prendre en compte. Ainsi, lorsque votre code JavaScript communique avec un serveur, la meilleure solution consiste à combiner les meilleures pratiques de développement de serveur, la validation robuste des paramètres et une plate-forme de sécurité JavaScript telle que Jscrambler pour rendre le client inviolable. De cette manière, vous pouvez empêcher la plupart des attaques contre l'intégrité de votre application déjà dans le client et vous assurer que vos clients obtiennent l'expérience que vous avez conçue pour eux..
Jscrambler peut également vous aider à vaincre les attaques et les fraudes commises dans le navigateur (MitB), les robots, les menaces à 0 jour et les menaces persistantes persistantes (APT) en détectant les modifications apportées au DOM et en vous fournissant toutes les informations nécessaires. arrêtez ces attaques. Pour plus d'informations, veuillez contacter [email protected].
Pour plus d'informations sur Jscrambler, ses nouvelles fonctionnalités et les dernières mises à jour, vous pouvez également visiter le site Web de Jscrambler..