web-dev-qa-db-ja.com

JavaScriptでのHTMLおよびスクリプトインジェクションの防止

入力ボックスのあるページがあるとします。ユーザーは入力ボックスに何かを入力し、ボタンを押します。ボタンは、テキストボックスに入力された値を取得し、何らかの理由でテキストボックスの下のページに出力する関数をトリガーします。

今、これは決定的な答えを見つけるのが非常に難しいか、私は尋ねませんが、この文字列をどのように出力しますか?

<script>alert("hello")</script> <h1> Hello World </h1>

スクリプトが実行されず、HTML要素も表示されないようにするには?

ここで本当に求めているのは、JavascriptでHTMLとスクリプトの両方のインジェクションを回避する標準的な方法があるかどうかです。誰もが別の方法を持っているようです(jQueryを使用しているので、単に文字列をtext要素ではなく、 html要素、たとえば、それはポイントではありません)。

45
lorless

<および>をHTMLと同等にエンコードできます。

html = html.replace(/</g, "&lt;").replace(/>/g, "&gt;");

HTMLタグをプレーンテキストとして表示する方法

58
TastySpaceApple
myDiv.textContent = arbitraryHtmlString 

@Danが指摘したように、遅延コールバックとスクリプトは常に実行されるため、ドキュメントに追加しないノードでも、innerHTMLを使用しないでください。これを確認できます https://gomakethings.com/preventing-cross-site-scripting-attacks-when-using-innerhtml-in-Vanilla-javascript/ 詳細について.

8
BiAiB

ワンライナー:

var encodedMsg = $('<div />').text(message).html();

動作確認:

https://jsfiddle.net/TimothyKanski/wnt8o12j/

2
Timothy Kanski

この関数htmlentities($ string)を使用します。

$msg = "<script>alert("hello")</script> <h1> Hello World </h1>"
$msg = htmlentities($msg);
echo $msg;
0
Tadas Janca

この方法を試して、「htmlコードを含む可能性のある文字列」を「テキスト形式」に変換します。

$msg = "<div></div>";
$safe_msg = htmlspecialchars($msg, ENT_QUOTES);
echo $safe_msg;

お役に立てれば!

0
Billy Bob