Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée des exemples de piratage de fonctions en JavaScript

小云云
Libérer: 2018-03-16 17:34:17
original
1810 Les gens l'ont consulté


Le détournement de fonction, comme son nom l'indique, détourne une fonction avant qu'elle ne s'exécute et ajoute la fonctionnalité souhaitée. Lorsque cette fonction est réellement exécutée, il ne s'agit plus de la fonction d'origine, mais des fonctions que nous avons ajoutées. C'est également l'un des principes de nos fonctions de hook communes.
À première vue, cela ressemble à une réécriture d'une fonction. La réécriture de fonctions peut également être comprise comme un type de détournement de fonctions, mais cette méthode est trop dégoûtante. En tant que pirate de l'air, après avoir tiré profit de l'enlèvement, vous devez également respecter l'éthique professionnelle et restituer la personne intacte, nous devons donc rappeler la fonction d'origine de la fonction à l'endroit approprié.
Par extension, en effet, on rencontre souvent la notion de « détournement ». Par exemple, si un site internet est piraté par un opérateur, la publicité de l'opérateur apparaîtra lors de la navigation sur le site.

Exemple

Prenons maintenant un exemple simple, détournons la fonction alert() et ajoutons-y une petite fonctionnalité :

let warn = alertwindow.alert = (t) => {    if (confirm('How are you?')) warn(t)
}

alert('Help me...!!!')
Copier après la connexion

Vous pouvez ouvrir le développement Essayez ceci Par exemple avec l'outil, vous constaterez que Aidez-moi... !!! n'apparaîtra que si vous cliquez sur OK pour confirmer.
Ensuite, nous encapsulons cette partie du contenu dans une fonction générale :

const hijack = (obj, method, fun) => {
  let orig = obj[method]
  obj[method] = fun(orig)
}
Copier après la connexion

Nous définissons d'abord une fonction de détournement, qui enregistrera d'abord la fonction d'origine, puis l'exécutera automatiquement. Définir une fonction, et le la fonction originale sera appelée dans la fonction personnalisée.
Alors détournons la fonction confirm() :

hijack(window, 'confirm', (orig) => {  return (text) => {
    alert('HELP ME PLZ!!!')    if (orig.call(this, text)) {
      alert('YOU SEEMS FINE AND I AM LEAVING, GOOD BYE!')
    } else {
      alert('HOLD ON! I AM COMING!!')
    }
  }
})
Copier après la connexion

La fonction de cette fonction est très simple et je ne l'expliquerai pas en détail. Appelez simplement confirm() et vous saurez : <. 🎜>

Anti-piratage

Créez une nouvelle page, ouvrez votre console d'outils de développement, entrez alerte, vous verrez cette sortie :

function alert() { [native code] }
Copier après la connexion
Utilisez ensuite le code au début de cet article, Hijack alert() et saisissez à nouveau alert sur la console. Vous verrez un résultat comme celui-ci :

function (t) => {    if (confirm(&#39;How are you?&#39;)) warn(t)
}
Copier après la connexion
À partir de l'exemple ci-dessus, vous pouvez savoir cela pour voir si une fonction a été piratée. , il vous suffit de l'imprimer. Pour les fonctions natives du système, [code natif] signifie qu'il est pur et sans pollution.

Recommandations associées :

Une brève discussion sur le piratage de la fonction javascript [réimprimé de xfocus]_compétences javascript

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!