Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation de l'injection js

Explication détaillée de l'utilisation de l'injection js

php中世界最好的语言
php中世界最好的语言original
2018-04-23 10:50:157555parcourir

Cette fois, je vais vous apporter une explication détaillée de l'utilisation de l'injection js. Quelles sont les précautions lors de l'utilisation de l'injection js. Voici des cas pratiques, jetons un coup d'oeil.

Une nouvelle vient de sortir récemment. Quatre employés du département de sécurité réseau d'Alibaba ont profité des vulnérabilités des pages Web pour écrire des scripts js afin de voler des gâteaux de lune. Je me suis donc intéressé et j'ai voulu savoir comment écrire ce script js, et. comment passer des commandes de différentes manières. Comment se déroule le vol avec arme à feu ?

Qu'est-ce qu'une attaque par injection javascript ?

1. Chaque fois que la saisie de l'utilisateur est acceptée et réaffichée, le site Web est vulnérable aux attaques par injection JavaScript. Examinons une application spécifique vulnérable aux attaques par injection JavaScript. Disons que vous avez créé un site Web de commentaires clients. Les clients peuvent visiter le site Web et saisir leurs commentaires sur le produit. Lorsqu'un client soumet des commentaires, les informations relatives aux commentaires réapparaissent sur la page de commentaires.
Le site Web de commentaires clients est un site Web simple. Malheureusement, ce site est vulnérable aux attaques par injection JavaScript.
Supposons que le texte suivant soit saisi dans un formulaire de commentaires client :

<script>alert("Attack!")</script> Ce texte représente le script JavaScript qui affiche la boîte de message d'avertissement. Une fois que quelqu'un a soumis ce script à un formulaire de commentaires clients, le message Attack ! apparaît lorsque quelqu'un visite ultérieurement le site de commentaires clients.

2. Une autre méthode consiste à saisir un code js dans la barre d'adresse du navigateur pour modifier le contenu des variables js et des balises de page.

Grâce à l'injection Javascript

, l'utilisateur peut modifier le contenu de la page Web sans la fermer ni l'enregistrer, cela se fait dans la barre d'adresse du navigateur. La syntaxe de la commande est la suivante :

javascript:alert(#command#)

Par exemple, si vous souhaitez utiliser http:// www.example.com

Si vous voyez une boîte d'avertissement d'alerte sur le site, saisissez d'abord l'URL dans la barre d'adresse et attendez que la page se charge, puis supprimez l'URL et saisissez :

javascript:alert("Hello World")

comme nouvelle URL. Cela fera apparaître une boîte d'alerte "Hello World" et vous pourrez utiliser cette technique pour modifier presque n'importe quel contenu de la page Web, comme une image. Supposons qu'il y ait une image du logo du site Web et que nous trouvions un morceau de code HTML en examinant le fichier source de la page :

L'image s'appelle "salut", le fichier source est "hello.gif", nous souhaitons le changer en "bye.jpeg" stocké sur notre site (http://www.mysite .com), donc l'adresse URL complète de l'image est http://www.mysite.com/bye.jpeg. Grâce à l'injection Javascript, il suffit de saisir dans la barre d'adresse :

javascript:alert(document .hi.src="http://www.mysite.com/bye.jpeg")

Vous verrez la pop-up "http://www. mysite.com/bye.jpeg" "avertissement d'alerte, puis l'image a été modifiée. Il est important de noter que ces changements ne sont que temporaires ! Si vous actualisez la page ou entrez à nouveau, vos modifications disparaîtront car vous avez uniquement effectué les modifications sur votre PC, pas sur le serveur Web. En utilisant la même méthode, on peut visualiser ou

modifier la valeur de la variable

Par exemple, on retrouve un morceau de code comme celui-ci sur la page web :

. signifie variable a La valeur est "test", maintenant nous entrons :

<SCRIPT LANGUAGE="JavaScript">
var a="test"
</SCRIPT>
javascript:alert(a)

Ensuite, nous changeons sa valeur en "bonjour" :

javascript:alert(a="hello")

L'injection Javascript est généralement utilisée pour modifier les propriétés du formulaire. Supposons qu'il existe un morceau de code comme celui-ci :

Nous souhaitons que le formulaire soit envoyé à notre adresse e-mail au lieu de quelqu'un@somewhere.com. Vous pouvez utiliser la commande suivante :

javascript:alert(document.format.mail.value="me@hacker.com")
<form name="format" action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit"></form>

•也许你已经注意到了这些命令的层次关系:
 •我们按照从左到右的顺序依次说明:
 •1)最左边是document
 •2)然后是我们想要更改的对象名(比如document.hi.src)或其包含的对象(比如document.format.mail.value)
 •3)最后是我们想要更改的属性(比如源路径:document.hi.src,或变量值:document.format.mail.value)
 •4)使用“.”号分隔
 •5)当我们想要更改属性值的时候,我们使用“=”号和新的属性值
 •*注释:当新的属性值为字符串时(比如:document.format.mail.value="me@hacker.com")需要用双引号把它括起来。
 •如果我们想要把它作为一个变量的值,则不需要使用双引号""。例如我们想要将变量b的值赋予变量a,我们可以输入javascript:alert(a=b)。
 •但是,页面中的大部分标签都没有名字,比如: 

<form action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit"></form>

在这段代码中没有表单名,综合上面这些信息,可以使用此命令: 

javascript:alert(document. .mail.value="me@hacker.com")

在这种情况下我们必须统计并找出表单序号,下面是一个例子: 

<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit">
</form>
<form action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit">
</form>
<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit">
</form>

•在以上代码中我们看见了3个表单,但我们只对第二个感兴趣,因此我们想要的表单序号就是2。不要忘记我们是从1开始计算的,比如1,2,3,4...而javascript却从0开始计算,比如0,1,2,3...所以真正的表单序号是1,不是2,通常我们要把找到的表单序号减一。我们将用这个序号来补全我们的命令:

javascript:alert(document.forms[1].mail.value="me@hacker.com")

•这样你就可以更改没有名字的图片或链接了,你可以把“forms”换成任何你想要的标签类型。对于图片就是 

javascript:alert(document.images[3].src="#the url of the picture you want#")

对于链接就是 

javascript:alert(document.links[0].href="#the url you want#")

 最后,我们可以用这个技巧来编辑cookies。下面的命令由triviasecurity.net的Dr_aMado编写,我只修改了一点点,让它在用户编辑之前显示出来。你只要把它们复制到地址栏就可以了:

javascript:alert(window.c=function a(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length);
c=c.substring(1,( (c.indexOf(";")>-1) ? c.indexOf(";") : c.length));nc=unescape(c).replace(v,nv);
document.cookie=n+"="+escape(nc);return unescape(document.cookie);});
alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""),
prompt("Change this value:",""),prompt("with this:","")))

//如果你想要手动更改你的cookie,可以使用下面这条命令:

javascript:alert(document.cookie)

这将显示你的当前cookie,假设是“userid=1”,如果你想把它改成“userid=2”,可以使用下列命令:

javascript:alert(document.cookie="userid=2")

最后我必须强调的是,所有的更改都只是在客户端!就像是把网页保存在你的PC上然后修改它。尽管如此,使用这一技巧你仍然可以欺骗页面(例如cookies)或绕过安全验证。例如一些网页会检测用户发送数据的位置,如果从http://www.test.com/form.php发送数据到http://www.test.com/check.php,check.php可能会检测数据是否来自http: //www.test.com/form.php上的表单。除此之外,如果你打算在页面中输入你自己的JavaScript代码,通过使用一些这样的技巧,你将能够更改图片并保持不变!

最后的最后,既然js注入这么可怕,我们自己写的网站有什么解决办法来防止js注入呢? 

方法一:

阻止 JavaScript 注入攻击的一种简单方法是重新在视图中显示数据时,用 HTML 编码任何网站用户输入的数据
如:<%=Html.Encode(feedback.Message)%>
使用 HTML 编码一个字符串的含意是什么呢?使用 HTML 编码字符串时,危险字符如 < 和 > 被替换为 HTML 实体,如 < 和 >。所以,当使用 HTML 编码字符串 <script>alert("Boo!")</script> 时,它将转换为 <script>alert("Attack!")</script>。浏览器在解析编码的字符串时不再执行 JavaScript 脚本。而是显示无害的页面。 

Méthode 2 :

En plus d'utiliser HTML pour encoder les données lors de leur affichage dans la vue, vous pouvez également utiliser HTML pour encoder les données avant en le soumettant à la base de données.

StringEscapeUtils.escapeHtml("Données soumises par le frontend");

En général, les gens préfèrent utiliser la première méthode décrite dans ce tutoriel plutôt que la troisième. Deux méthodes . Le problème avec la deuxième approche est que vous vous retrouvez avec des données codées en HTML dans la base de données. En d’autres termes, les données de la base de données contiendront des caractères étranges. Quel est le mal ? Si vous devez afficher les données de la base de données sous une forme autre qu'une page Web, vous rencontrerez des problèmes. Par exemple, les données ne peuvent pas être facilement affichées dans une application Windows Forms.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

!=,==,!==,===Résumé d'utilisation

En JS Comment comparer les unités de temps

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