L'un des aspects les plus passionnants du développement Web moderne réside dans le potentiel que représente la création d'applications spécialement conçues pour les navigateurs Web (ou l'exécution "dans le cloud").
À l’origine, Java était censé être la solution «écrivez une fois pour toutes, partout», mais il semble que le Web soit devenu le support idéal pour cela. Qui aurait pensé, à droite?
Mais avec les différents navigateurs disponibles, les technologies que nous pouvons exploiter et, tout simplement, le soigné choses que nous pouvons faire, il y a encore un ventre noir pour le développement d'applications web - scripting entre sites.
Et étant donné que WordPress est une application Web sur laquelle beaucoup d’entre nous construisons pour le plaisir, pour le profit ou pour gagner sa vie, c’est un sujet que nous ne devrions pas éviter. notamment si nous voulons avoir les produits les plus robustes possibles.
Dans cette série en deux parties, nous allons examiner ce que sont les scripts intersites vraiment est, ses dangers, son impact sur le développement de WordPress, puis les étapes pratiques que nous pouvons prendre pour tester nos thèmes et plugins.
Les scripts intersites, généralement abrégés en XSS, sont définis sur Wikipedia comme suit:
XSS permet aux attaquants d'injecter un script côté client dans des pages Web consultées par d'autres utilisateurs. Une vulnérabilité de script intersite peut être utilisée par des attaquants pour contourner des contrôles d'accès tels que la même stratégie d'origine..
Je pense que cette définition fonctionne bien si vous connaissez les vulnérabilités, la même politique d'origine et ce qui constitue exactement l'injection d'un script côté client, mais pour beaucoup, cela ne suffit tout simplement pas..
Une vue conceptuelle de la façon dont les données voyagent d'un client à un serveur.Alors jetons un coup d'oeil à la création de scripts intersite à partir du sol avant d'aller plus loin.
Les scripts côté client sont essentiellement tout code qui s'exécute sur le côté client d'un site Web ou d'une application Web. On peut dire que les scripts côté client les plus populaires sont les fonctions JavaScript. En revanche, PHP serait considéré comme un script côté serveur.
Voici une autre façon de voir les choses: les scripts côté client sont envoyés du serveur à l’ordinateur du visiteur lors du chargement de la page Web. Le script s'exécute ensuite. Parfois, il fait quelque chose de simple, comme animer un menu.
D'autres fois, il peut faire quelque chose de plus avancé, comme passer un appel asynchrone au serveur, récupérer des données en fonction de l'emplacement des utilisateurs et personnaliser les informations affichées..
Bien que cela puisse utiliser les informations de localisation fournies par le navigateur, cela reste sûr car le navigateur maintient les données et les informations sont récupérées en fonction des informations disponibles publiquement..
Peut-être un meilleur nom pour "Script Injection" est "injection de code".
Ici, un attaquant cherche littéralement un type d’élément d’entrée sur votre site. Il peut s’agir d’un champ de recherche, d’un champ de contact, d’un champ de nom ou tout autre type d'élément qui soumet des données à un serveur. Cela se fait normalement par l’utilisation d’un script - c’est parfois du code JavaScript malveillant, mais des attaquants pouvez réussir à insérer des commandes PHP ou MySQL, ainsi.
Enfin, on parle d'injection, car si l'attaquant réussit, il s'injecte littéralement leur code dans votre application.
Le concept de politique de même origine est simple: il s'agit d'une politique que les navigateurs appliquent et qui autorise essentiellement les scripts côté client - tels que JavaScript - à envoyer des demandes à d'autres pages et à des scripts côté serveur. sur le même serveur (ou de même origine), mais pas vers d'autres domaines ou sites.
Par exemple, vous pouvez configurer une fonction JavaScript pour passer un appel de tutsplus.com à wordpress.com, récupérer des données, puis les afficher sur tutsplus.com. Cela violerait la politique de même origine.
Maintenant, pour clarifier, cela ne veut pas dire qu'il ne peux pas être terminé. Grâce à la combinaison de fonctions créatives côté client et d’appels côté serveur, pouvez être atteint, mais les navigateurs font de leur mieux pour empêcher que les scripts côté client ne le fassent.
À ce stade, les implications devraient être assez claires. Les vulnérabilités liées aux scripts entre sites peuvent donner aux visiteurs malveillants le contrôle de nos sites et de nos applications Web d’une manière que nous ne pourrions éventuellement pas contrôler..
Par exemple, ils peuvent aller de relativement mineurs à beaucoup plus critiques:
Tout dépend des fonctionnalités offertes par le site et de la sécurité réelle du site..
Quoi qu’il en soit, la sécurité des applications Web est une priorité. Certes, je pense que nous devrions tous nous spécialiser dans nos domaines respectifs et que les spécialistes de la sécurité sont des personnes avec lesquelles nous devrions consulter avant de lancer une application Web pouvant contenir des informations sensibles, mais cela ne signifie pas que nous ne pouvons pas nous familiariser avec nous-mêmes. avec quelques stratégies de base pour nos propres tests.
Avant d'examiner réellement les avantages pratiques de la mise en œuvre de techniques XSS-safe dans nos efforts de développement, il est important de noter pourquoi, en tant que développeurs WordPress, nous devrions même nous en préoccuper..
Considérez ceci: WordPress est une application Web fullstack. Il se compose d'une base de données, d'une couche d'application et d'une couche de présentation, toutes extensibles à d'autres développeurs..
La pile de WordPressCela signifie que WordPress lui-même est soumis à de nombreuses menaces de sécurité identiques à celles de toute autre application Web, mais ceux qui construisent pour WordPress le sont également..
Même si WordPress était hautement résistant aux attaques XSS, cela ne signifie pas que des outils tiers tels que des plugins ou des thèmes bénéficient automatiquement de ces avantages..
Après tout, ils sont construits par des développeurs tiers qui peuvent ne pas suivre les meilleures pratiques lors de l'écriture de code défensif..
Toutes les fonctionnalités de WordPress mises à part, et au niveau le plus élémentaire, si votre travail accepte n'importe quelle entrée de l'utilisateur, vous ouvrez potentiellement la porte à un exploit XSS.
J'irais même jusqu'à dire que si vous cherchez à exploiter certaines des API de base de WordPress pour accepter les entrées et stocker des données, vous n'êtes pas complètement sûr..
Après tout, WordPress pourrait avoir des exploits qui n'ont pas encore été découverts.
Cela soulève donc la question suivante: si nous nous soucions vraiment du travail que nous faisons et voulons construire quelque chose de beaucoup plus sûr, nous pouvons faire un certain nombre de choses.
Tout d'abord, nous devons nous assurer que nous utilisons les fonctions d'API appropriées pour gérer les champs d'entrée, les attributs, la validation et la purification. Certaines de ces fonctions fournissent des fonctionnalités spécifiques pour:
En fait, l'article du Codex offre des fonctions détaillées sur:
Je recommande fortement de lire l'article dans son intégralité.
Deuxièmement, nous pouvons exécuter notre thème ou notre plug-in grâce à une batterie de tests XSS utilisés pour découvrir tous les exploits que nous n'avons pas détectés. Mais nous couvrirons cela dans le prochain article.
Pour résumer, les scripts intersites font référence à la possibilité, pour les utilisateurs malveillants, d'insérer leur propre code malveillant sur notre site Web, notre application Web, un thème ou un plug-in pour tenter de prendre le contrôle de tout ou partie des aspects du site Web..
Le potentiel d’exploits varie d’une application à l’autre, mais étant donné que notre domaine de spécialité est WordPress, nous nous concentrerons sur les stratégies de contrôle d’exploitation de notre travail dans le prochain article..