0

HTML内のJavaScriptへのJSON埋め込み

Jadeでこういう風に書いている箇所があった


http://node-linda-base.herokuapp.com/test?a=%3C/script%3E%3Cmarquee%3E

script.
var name = "#{name}";
var tuple = !{JSON.stringify(tuple)};
script(src='/socket.io/socket.io.js')
ユーザーからの入力によって生成されたサーバー側の変数tupleをjsonにしてから、ブラウザ側のjsの変数に渡している

こういうHTMLが出力される


ただし</script>という文字列がjson中に現れるとそこでscriptタグが終わって、なんでも出来てしまい

こうなる

もちろんmarqueeではなくscript src=も埋め込める


最終的にこう書いた

script.
var name = "#{name}";
var tuple = JSON.parse(unescape("!{escape(JSON.stringify(tuple))}"));
script(src='/socket.io/socket.io.js')
サーバー側の変数tupleをescape済みのjson文字列にしてブラウザに渡し、ブラウザ側でunescape後にJSON.parseしてJSの変数にした。

こういうHTMLが出力される。


これで正しいのかな?

0

jade内のJavaScriptに変数を渡す

expressからjadeに変数を渡す

tuplespace: (req, res) ->
name = “delta”;
tuple = {sensor: “light”, value: 80};
return res.render 'tuplespace', name: name, tuple: tuple

jadeでは.scriptと書くと複数行のインラインJavaScriptscriptが書けるので
script.
var name = "#{name}";
var tuple = !{JSON.stringify(tuple)};
文字列はクオートして、オブジェクトはJSONにしてviewのjavascriptに渡せた。


追記 XSSが可能だった HTML内のJavaScriptへのJSON埋め込み