前提・実現したいこと
勉強の一貫で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")
が発火すると思ったのですがしませんでした。
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー