javascript:
URI Schemeの一種
ブラウザ上での問題
リンク先として設定されている場合などにXSSが発生する
<a href="javascript:alert(xxx)">xss</a> のようなHTMLガセ生成可能であった場合
markdownのレンダリングでよく発生する
あるいはlocation.href = "javascript:alert(xxx)のようなリダイレクトでのXSS
防ぐ場合
schemeをhttp/httpsのみに絞る
CSPを設定する
Rubyでの挙動
URIでパース可能
URI#hostの値も設定可能であるため、hostの有無を想定するURLかどうかのは判定には使用できない
確認コード(Github)
code:ruby
require 'uri'
uri = URI.parse('javascrpt:aaa')
puts uri
# => javascrpt:aaa
puts uri.host
# =>
uri = URI.parse('javascrpt://example.com/path#?')
puts uri.host
# => example.com
open-uriが読み込まれていたとしてもjavascript:をパースしたオブジェクトでは.readが呼び出せずエラーになる
事例
React.jsで起こるXSS (advent calendar 12日目の話)