Project

General

Profile

Bug(バグ) #3934

:80, :443 以外のポートでアクセスするSNSでOAuth署名の検証に失敗する

Added by Youichi Kimura about 3 years ago. Updated about 2 years ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
-
Target version:
Start date:
2016-04-25
Due date:
% Done:

0%

3.6 で発生するか:
Yes (はい)
3.8 で発生するか:
Unknown (未調査)

Description

Overview (現象)

http://sns.example.com:8080/ のように :80, :443 以外のポートに設置された SNS で、opWebAPIPlugin などが提供する API に OAuth を使用してアクセスしようとすると OAuth 署名の検証に失敗してエラーとなる。

その際に、Apache の error_log には下記のようなエラーが記録される:

[Mon Apr 25 09:08:16.854133 2016] [fcgid:warn] [pid 27166:tid 139768981554944] [client 10.0.2.2:60103] mod_fcgid: stderr: Invalid signature

Causes (原因)

source:lib/vendor/OAuth/OAuth.php@43190aa1#L190

  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
              ? 'http'
              : 'https';
    @$http_url or $http_url = $scheme .
                              '://' . $_SERVER['HTTP_HOST'] .
                              ':' .
                              $_SERVER['SERVER_PORT'] .
                              $_SERVER['REQUEST_URI'];

上記のコードは OAuthRequest::from_request() メソッドの冒頭部分であるが、例えば http://sns.example.com:8080/ のような URL にアクセスがあった場合は上記の $_SERVER['HTTP_HOST'] には sns.example.com:8080 の文字列が入る。
つまり、この場合の $http_urlhttp://sns.example.com:8080:8080/ という文字列が生成されてしまう。
この $http_urloauth_signature の検証にも使用される文字列であるため、最終的には署名の検証に失敗し不正なリクエストとして扱われることになる。

Way to fix (修正内容)

この不具合は lib/vendor/OAuth/OAuth.php の問題であるが、 https://code.google.com/archive/p/oauth/issues/170 の通り既に報告がされており修正も済んでいる。
そのため、lib/vendor/OAuth/OAuth.php を最新の https://oauth.googlecode.com/svn/code/php/OAuth.php に置き換えることで当チケットの不具合は解決する。

History

#1 Updated by kaoru n about 2 years ago

  • Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.9.0

Also available in: Atom PDF