Maison  >  Article  >  interface Web  >  Explication détaillée des exemples de piratage de fonctions en JavaScript

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

小云云
小云云original
2018-03-16 17:34:171830parcourir


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...!!!')

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)
}

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!!')
    }
  }
})

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] }
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)
}
À 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!

Déclaration:
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
Article précédent:JSON simple et efficaceArticle suivant:JSON simple et efficace