14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HTMLでリンクを生成するときにURIスキームより前に入れても問題がない文字列一覧

Last updated at Posted at 2014-08-21

URIスキームの仕様

URIスキームの代表的なものには以下のようなものが存在します。

  • http
  • https
  • javascript

通常URIスキームより前に文字列を入れると、URIスキームが正しく認識されなくなります。

"xss"http://example.com

しかしこの仕様は、HTMLのリンクでは回避することができます。

URIスキームの仕様を回避する

URIスキームの仕様をHTMLのリンクで回避するには、以下のような数値文字参照を使用します。

  • 	
  • 

  • 
  •  

 は半角スペースで、以前の記事でも紹介したようにスキーム名の先頭に半角スペースを入れても動作するようになっています。

 
この2つは改行コードで、これも半角スペースと同じ働きをします。
最後に残った	は見慣れない数値文字参照ですよね。
これは何かというと、HTです。
分かりやすく言うと、水平タブのことです。
水平タブも、半角スペースと同じ働きをします。
これらの数値文字参照を使ったリンクをHTMLで生成すると、以下のようになります。

<a href="&#x20;javascript:alert(1)">xss</a>

もちろんこのリンクにアクセスをすると、きちんとjavascriptスキームが認識されてalert(1)が出てきます。

このような抜け道がURIスキームには存在するので、ユーザから入力されたURIをチェックする正規表現を作る際には気をつけてください。
httpとhttpsしか受け入れないようにホワイトリスト方式で正規表現を作ることも1つの手ですね。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?