ホームページ  >  記事  >  ウェブフロントエンド  >  jsインジェクションの使い方を詳しく解説

jsインジェクションの使い方を詳しく解説

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-23 10:50:157603ブラウズ

今回はjsインジェクションの使い方について詳しく説明します。jsインジェクションを使用する際の注意点は何ですか?実際の事例を見てみましょう。

最近、アリババのネットワークセキュリティ部門の従業員4人がWebの抜け穴を利用して月餅を盗むためのJSスクリプトを作成したというニュースが出たので、私はこのJSスクリプトの書き方を知りたいと思いました。 . それを達成する方法。

JavaScript インジェクション攻撃とは何ですか?

1. ユーザー入力が受け入れられて再表示されるたびに、Web サイトは JavaScript インジェクション攻撃に対して脆弱になります。 JavaScript インジェクション攻撃に対して脆弱な特定のアプリケーションを調べてみましょう。顧客フィードバック Web サイトを作成したとします。顧客は Web サイトにアクセスして、製品に関するフィードバックを入力できます。顧客がフィードバックを送信すると、フィードバック情報がフィードバック ページに再度表示されます。

顧客フィードバック Web サイトはシンプルな Web サイトです。残念ながら、このサイトは JavaScript インジェクション攻撃に対して脆弱です。
次のテキストが顧客フィードバック フォームに入力されているとします。

<script>alert("攻撃!")</script>

このテキストは、アラート メッセージ ボックスを表示する JavaScript スクリプトを表します。このスクリプトを顧客フィードバック フォームに送信すると、今後顧客フィードバック サイトにアクセスすると、「攻撃!」というメッセージが表示されます。

2. 別の方法は、ブラウザのアドレスバーに js コードを入力して、ページの js 変数とページタグの内容を変更することです。

JavaScriptインジェクションを使用すると、ユーザーはWebページを閉じたり保存したりせずに、Webページのコンテンツを変更できます。これはブラウザのアドレスバーで行われます。コマンドの構文は次のとおりです:

javascript:alert(#command#)

たとえば、

http://www.example.com サイトでアラート ボックスを表示したい場合は、次のようにします。まずアドレスバーに URL を入力し、ページが読み込まれるまで待ちます。その後、URL を削除して、新しい URL として

javascript:alert("Hello World")

を入力します。これにより、「Hello World」警告ボックスがポップアップ表示され、この手法を使用して、画像などの Web ページ上のほぼすべてのコンテンツを変更できます。 Web サイトのロゴ画像があり、ページのソース ファイルを調べて HTML コードを見つけたとします。

画像は次のとおりです。 「hi」という名前です。ソース ファイルは「hello.gif」ですが、これをサイト (http://www.mysite.com) に保存されている「bye.jpeg」ファイルに変更したいので、画像は http://www.mysite.com/bye.jpeg です。JavaScript インジェクションを使用すると、アドレス バーに次のように入力するだけです:

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

「http://www.mysite.com/bye.jpeg」アラート ポップアップが表示され、画像が変更されます。これらの変更は一時的なものにすぎないことに注意することが重要です。ページを更新するか再入力すると、変更は Web サーバーではなく PC 上でのみ行われたため、変更内容は消えます。 同じ方法を使用して、変数

の値を表示したり、

変更したりすることができます。たとえば、Web ページで次のようなコードを見つけます。

<SCRIPT LANGUAGE="JavaScript">
var a="test"
</SCRIPT>

は、変数 a の値が「test」であることを意味します。次に、次のように入力します:

javascript :alert(a)

次に、その値を「hello」に変更します:

javascript:alert(a="hello")

通常、変更にはJavaScriptインジェクションが使用されます。フォーム属性。次のような段落があると仮定します。 コード:

<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>
フォームをsomewhere@somewhere.comではなく、メールアドレスに送信したいと考えています。次のコマンドを使用できます:

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

•也许你已经注意到了这些命令的层次关系:
 •我们按照从左到右的顺序依次说明:
 •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 脚本。而是显示无害的页面。 

方法 2:

ビューにデータを表示するときに HTML を使用してデータをエンコードするだけでなく、データベースに送信する前に HTML を使用してデータをエンコードすることもできます。

StringEscapeUtils.escapeHtml("フロントエンドによって送信されたデータ");

一般に、人々は 2 番目の方法ではなく、このチュートリアルで説明する最初の方法を使用することを好みます。 2 番目の方法の問題は、データベース内に HTML エンコードされたデータが残ることです。つまり、データベース内のデータには奇妙な文字が含まれることになります。何が害ですか?データベース データを Web ページ以外の形式で表示する必要がある場合、問題が発生します。たとえば、Windows フォーム アプリケーションではデータを簡単に表示できません。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

!=,==,!==,===使用法の概要

JSで時間単位を比較する方法

以上がjsインジェクションの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。