Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung der Verwendung von js-Injection
Dieses Mal werde ich Ihnen die Vorsichtsmaßnahmen bei der Verwendung von js-Injektion ausführlich erläutern. Schauen wir uns die folgenden praktischen Fälle an.
Vor kurzem wurden Neuigkeiten veröffentlicht. Vier Mitarbeiter der Netzwerksicherheitsabteilung nutzten die Schwachstellen von Webseiten, um JS-Skripte zu schreiben, um Mooncakes zu stehlen Wie kann man auf unterschiedliche Weise Befehle durchziehen? Wie wird der Waffenraub durchgeführt?Was ist ein Javascript-Injection-Angriff?
1. Immer wenn Benutzereingaben akzeptiert und erneut angezeigt werden, ist die Website anfällig für JavaScript-Injection-Angriffe. Lassen Sie uns eine bestimmte Anwendung untersuchen, die anfällig für JavaScript-Injection-Angriffe ist. Nehmen wir an, Sie haben eine Website für Kundenfeedback erstellt. Kunden können die Website besuchen und Feedback zum Produkt abgeben. Wenn ein Kunde Feedback sendet, werden die Feedbackinformationen erneut auf der Feedbackseite angezeigt.Kundenfeedback-Website ist eine einfache Website. Leider ist diese Website anfällig für JavaScript-Injection-Angriffe.
Angenommen, der folgende Text wird in ein Kundenfeedbackformular eingegeben:
<script>alert("Attack!")</script> Dieser Text stellt das JavaScript-Skript dar, das das Warnmeldungsfeld anzeigt. Nachdem jemand dieses Skript an ein Kunden-Feedback-Formular gesendet hat, wird die Meldung „Angriff!“ angezeigt, wenn jemand in Zukunft die Kunden-Feedback-Site besucht. 2. Eine andere Methode besteht darin, einen JS-Code in die Adressleiste des Browsers einzugeben, um den Inhalt der JS-Variablen und Seiten-Tags der Seite zu ändern.
Mithilfe der Javascript-Injection kann der Benutzer den Inhalt der Webseite ändern, ohne sie zu schließen oder zu speichern. Dies erfolgt über die Adressleiste des Browsers. Die Syntax des Befehls lautet wie folgt:
Wenn Sie beispielsweise http:// verwenden möchten www.example.comWenn auf der Website ein Warnfeld angezeigt wird, geben Sie zunächst die URL in die Adressleiste ein und warten Sie, bis die Seite geladen wird. Löschen Sie dann die URL und geben Sie Folgendes ein:
javascript:alert("Hello World")
als neue URL. Dadurch wird ein „Hallo Welt“-Warnfeld angezeigt, und Sie können diese Technik verwenden, um nahezu jeden Inhalt auf der Webseite zu ändern, beispielsweise ein Bild. Angenommen, es gibt ein Website-Logo-Bild und wir finden einen HTML-Code, indem wir uns die Quelldatei der Seite ansehen:
Das Bild heißt „hi“, die Quelldatei ist „hello.gif“, wir möchten sie in „bye.jpeg“ ändern und auf unserer Website (http://www.mysite) speichern .com)-Datei, sodass die vollständige URL-Adresse des Bildes http://www.mysite.com/bye.jpeg lautet. Mithilfe der Javascript-Injection müssen wir nur Folgendes in die Adressleiste eingeben:
javascript:alert(document .hi.src="http://www.mysite.com/bye.jpeg")Sie sehen das Popup „http://www. mysite.com/bye.jpeg" "Alarmwarnung, und dann wurde das Bild geändert. Es ist wichtig zu beachten, dass diese Änderungen nur vorübergehend sind! Wenn Sie die Seite aktualisieren oder erneut aufrufen, verschwinden Ihre Änderungen, da Sie die Änderungen nur auf Ihrem PC und nicht auf dem Webserver vorgenommen haben. Mit der gleichen Methode können wir den Wert der Variablen anzeigen oder
ändern. Beispielsweise finden wir auf der Webseite einen Code wie diesen:
bedeutet Variable a. Der Wert ist „test“, jetzt geben wir ein:
<SCRIPT LANGUAGE="JavaScript"> var a="test" </SCRIPT>javascript:alert(a)
Dann ändern wir seinen Wert in „hello“ :
javascript:alert(a="hello")Javascript-Injection wird normalerweise verwendet, um Formulareigenschaften zu ändern:
Wir möchten, dass das Formular an unsere E-Mail-Adresse und nicht an someone@somewhere.com gesendet wird. Sie können den folgenden Befehl verwenden: 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 脚本。而是显示无害的页面。
Methode 2:
Zusätzlich zur Verwendung von HTML zum Kodieren der Daten bei der Anzeige in der Ansicht können Sie auch HTML verwenden, um die Daten vorher zu kodieren Übermittlung an die Datenbank.
StringEscapeUtils.escapeHtml("Vom Frontend übermittelte Daten");
Im Allgemeinen verwenden Benutzer lieber die erste in diesem Tutorial besprochene Methode als die dritte . Das Problem beim zweiten Ansatz besteht darin, dass Sie letztendlich HTML-codierte Daten in der Datenbank haben. Mit anderen Worten: Die Daten in der Datenbank enthalten seltsame Zeichen. Was ist der Schaden? Wenn Sie Datenbankdaten in einer anderen Form als einer Webseite anzeigen müssen, treten Probleme auf. Beispielsweise können Daten in einer Windows Forms-Anwendung nicht einfach angezeigt werden.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
!=,==,!==,===Nutzungszusammenfassung
In JS So vergleichen Sie Zeiteinheiten
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von js-Injection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!