🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1519閲覧

XSSでjavascriptを実行させたい

isisisimylife

総合スコア42

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/12/28 07:18

前提・実現したいこと

勉強の一貫でXSSが可能な脆弱なToDoアプリをGolangで実装しています。
以下のような入力で,JavaScriptが発火すると予想していたのですが発火しませんでした、原因がわかる方がいればお聞きしたです。またjavascriptを発火させるにはどのようにすればいいか教えていただきたいです。

アプリ画面

環境
Go SDK 1.14.4
テンプレートエンジン: Go の標準ライブラリの html/template
OS: macOS Catalina バージョン10.15.7
ブラウザ: Google Chrome (バージョン: 87.0.4280.88(Official Build) (x86_64))

該当のソース

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>SampleToDo</title> 6</head> 7<body> 8 <h2>TODO</h2> 9 <form method="post" action="/new"> 10 <p>内容:<input type="text" name="task" size="30" placeholder="数学の宿題"></p> 11 <p> 12 状態: 13 <select name="status"> 14 <option value="未実行">未実行</option> 15 <option value="実行中">実行中</option> 16 <option value="終了">終了</option> 17 </select> 18 </p> 19 <p><input type="submit" value="送信"></p> 20 </form> 21 22 <ul> 23 {{ range .todos }} 24 <li> 25 内容:{{ .Task }}、状態:{{ .Status }} 26 <input type="hidden" name="task" value="{{ .Task}}"> <!--意味はないがXSSさせたいので追加--> 27 </li> 28 {{end}} 29 </ul> 30</body> 31</html>

ハンドラー

Go

1func (h todoHandler) Create(ctx *gin.Context) { 2 task := ctx.PostForm("task") 3 status := ctx.PostForm("status") 4 h.uc.Create(task, status) 5 ctx.Redirect(302, "/") 6} 7 8func (h todoHandler) FetchAll(ctx *gin.Context) { 9 todos, err := h.uc.FetchAll() 10 if err != nil { 11 println(err) 12 } 13 ctx.HTML(200, "index.html", gin.H{"todos": todos}) 14}

行った操作

1. 以下の文字列をを内容欄に入力し送信

html

1"><script>alert("XSS")</script> <--"

2. localhost:8080/(上の写真の画面)にリダイレクトされるのでそのまま待つ

想定した挙動

リダイレクトされた後にalert("XSS")が発火すると思ったのですがしませんでした。

デベロッパツールでの様子です。

ここにより詳細な情報を記載してください。

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

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

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

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

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

Lhankor_Mhy

2020/12/28 07:34

普通にエスケープされているのではないでしょうか? 出力されたHTMLソースをご覧になってはいかがですか?
otn

2020/12/28 09:32

× JavaScriptが発火する ○ JavaScriptが実行される
isisisimylife

2020/12/29 02:14 編集

エスケープされてました。(GoogleのデベロッパツールのElementではエスケープされててもエスケープ処理を施していない状態で表示されることを知らなかったです)
guest

回答1

0

自己解決

GoogleデベロッパツールのElementで見るとエスケープされていないのですが

GoogleデベロッパツールのSourceで確認したところエスケープが施されていました。

投稿2020/12/29 02:18

isisisimylife

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問