Ticket #28740

ニコニコ側のリダイレクトURLが相対URIの時にエラー

Open Date: 2012-06-15 17:26 Last Update: 2012-06-16 09:53

Reporter:
Owner:
Type:
Status:
Closed
MileStone:
(None)
Priority:
9 - Highest
Severity:
9 - Highest
Resolution:
Fixed
File:
None

Details

たとえば、這いよれ!ニャル子さん 第10話「超時空の覇者」の情報を

http://ext.nicovideo.jp/api/getthumbinfo/1339405721
から取得すると、
<video_id>so18069623</video_id>
が帰ってくる。で、このvideo_idに合わせて、
http://www.nicovideo.jp/watch/so18069623
にアクセスすると、
http://www.nicovideo.jp/watch/1339405721
にリダイレクトされる。この時のヘッダは
HTTP/1.1 302 Found
Connection:close
Content-Encoding:gzip
Content-Language:ja
Content-Length:20
Content-Type:text/html
Date:Fri, 15 Jun 2012 07:52:46 GMT
Location:/watch/1339405721
Server:Apache
Vary:Accept-Encoding
X-Frame-Options:SAMEORIGIN
x-niconico-authflag:3
x-niconico-id:185957
で、以下のLocation行でジャンプ先を指定しているものの、
Location:/watch/1339405721
これはRFC違反。 http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec14.30
Location       = "Location" ":" absoluteURI
で、absoluteURIの定義はhttp://www.ietf.org/rfc/rfc2396.txt
absoluteURI   = scheme ":" ( hier_part | opaque_part )
なので、Locationにはスキームが必ず必要なのに、ニコニコ動画の方にはスキームが付いてない

さーてどうしよう

  • ニコニコ動画側が直すべき
  • 「送る方は厳しく、受信側は寛容に」に基づいてこっちで対処
  • リダイレクトが起きないようにこちらからURLを変える

ただ、Pythonのソースを見ると

        # For security reasons we don't allow redirection to anything other
        # than http, https or ftp.

        if not urlparts.scheme in ('http', 'https', 'ftp'):
            raise HTTPError(newurl, code,
                            msg +
                            " - Redirection to url '%s' is not allowed" %
                            newurl,
                            headers, fp)
とセキュリティを問題にしている模様

Ticket History (3/5 Histories)

2012-06-15 17:26 Updated by: ledyba
  • New Ticket "ニコニコ側のリダイレクトURLが相対URIの時にエラー" created
2012-06-15 17:26 Updated by: ledyba
  • Priority Update from 5 - Medium to 9 - Highest
2012-06-15 17:26 Updated by: ledyba
  • Details Updated
2012-06-15 22:51 Updated by: ledyba
Comment

Python3.2.3のソースだとこのようになってました。

        # For security reasons we don't allow redirection to anything other
        # than http, https or ftp.

        if urlparts.scheme not in ('http', 'https', 'ftp', ''):
            raise HTTPError(
                newurl, code,
                "%s - Redirection to url '%s' is not allowed" % (msg, newurl),
                headers, fp)

 というわけで、Windows版に付属してるPortablePython(3.2.1)が若干古いのが問題なようです…。

 修正してるリビジョンはこちら http://hg.python.org/cpython/file/86141d28b20d/Lib/urllib/request.py

2012-06-16 09:53 Updated by: ledyba
  • Ticket Close date is changed to 2012-06-16 09:53
  • Status Update from Open to Closed
  • Resolution Update from None to Fixed
Comment

Pythonをアップデートして修正しました。 公式ビルドをuniextractすればPortableになるみたいです。

…となると、PortablePythonの立場は…? # 他にたくさんライブラリが入ってることぐらい?

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login