質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2460閲覧

innerHTMLのセキュリティ問題について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2021/02/27 03:05

編集2021/02/27 09:50

以下1番目のようなコードがあり、悪意のあるユーザーが入力するユーザ名などにスクリプトなどが埋め込まれていた場合、ブラウザは何の疑いもなくそのスクリプトを実行してしまうので
セキュリティ上問題なのは、よくわかるのですが

2番目のコードについてはボタンをクリックして要素の再構築をしている部分で悪意があるユーザーがtext-msg.innerHTMLの部分にscriptを入れてしまうので、サニタイズが必要になると授業で習ったのですがいまいちよくわかりません。

どうやってユーザー入力もない部分のtext-msg.innerHTML = "タグの中身を変更しました!"という内部コードをいじれるのでしょうか?

javascript

1 2 3const { username, password } = await api.getUser(); 4const userInfo = document.createElement('div'); 5userInfo.innerHTML = `${username}, ${password}`; 6

html

1 2<div id="text-msg"> 変更前</div> 3<input type="button" value="Click" onclick="myfunc()"> 4 5 <script> 6 const myfunc = function(){ 7 8 const text_msg = document.getElementById("text-msg"); 9 text_msg.innerHTML = "タグの中身を変更しました!"; 10 11 } 12 </script> 13 14

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2021/02/27 03:34

api.getUser() はどういうふるまいをするのですか?
m.ts10806

2021/02/27 03:50 編集

デベロッパーツールで調べてみては。
m.ts10806

2021/02/27 03:51

変数名にハイフンは使えないので2番目はそもそも動かないのでは。
退会済みユーザー

退会済みユーザー

2021/02/27 09:51

すみません、_になってませんでした
guest

回答2

0

ベストアンサー

サニタイズが必要になると授業で習ったのですがいまいちよくわかりません。

2つ目の例は固定文字列を代入しているので何の危険もありません。文字列が <& を含んでないことも明らかなのでサニタイズも必要ありません。授業の講師が言ったことを間違って解釈しているか、講師が間違ったことを言っています。

参考までに、innerHTML で挿入した <script> は実行されません。イベントハンドラ属性やjavascript: URLなどでコードを実行することはできるのでやはり注意は必要ですが。

投稿2021/03/01 02:03

int32_t

総合スコア20872

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/03 16:20

ご回答ありがとうございます! そうですよねぇ....HTML5 では innerHTML で挿入された <script> タグは実行されないですよね... ただ const image = "<img src='x' onerror='alert(1)'>"; el.innerHTML = image; は実行されるからとごまかされました...
guest

0

そもそも論ですが、後者のコードは文法的に成立しません

javascript

1// マイナスでトークンが切れて引き算になるけど、ここで引き算を入れるのはおかしいので文法エラー 2const text-msg

投稿2021/02/27 03:51

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問