プロジェクト

全般

プロフィール

Bug(バグ) #1977

Web API の認証エラー時のHTTPレスポンスヘッダーが200となっている

Shinichi Urabe約13年前に追加. 8年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2011-03-26
期日:
進捗率:

100%

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

説明

現象

認証が通っていない環境から以下のようなコマンドを叩くと
本来はレスポンスで 401 もしくは 403 のHTTPヘッダが一行目に返ってくるはずが
200 のレスポンスが返ってきている

$ curl -I http://sns.example.com/api.php/feeds/member/1
HTTP/1.1 200 OK
Date: Fri, 25 Mar 2011 19:53:38 GMT

原因

認証失敗時のHTTPヘッダの一行目の記述がない

修正内容

lib/filter/opAPISecurityFilter.class.php の 51行目にてステータスコード等を出力しているが
ヘッダー出力ではないため、上記の記述を他のヘッダー出力の前に「ヘッダー」出力する


関連するチケット

関連している OpenPNE 3 - Backport(バックポート) #2776: Web API の認証エラー時のHTTPレスポンスヘッダーが200となっている Fixed(完了) 2011-03-26
関連している OpenPNE 3 - Backport(バックポート) #2777: Web API の認証エラー時のHTTPレスポンスヘッダーが200となっている Fixed(完了) 2011-03-26

関係しているリビジョン

リビジョン c50557e9 (差分)
Maki Takahashi約12年前に追加

(fixes #1977) added send status code before send other httpHeaders in opAPISecurityFilter

リビジョン 6a717dbe (差分)
Maki Takahashi約12年前に追加

(fixes #1977) use sfWebResponse::sendHttpHeaders() instead of header() and undo remove response body

履歴

#1 Shingo Yamadaほぼ13年前に更新

  • 担当者Shingo Yamada にセット

#2 Maki Takahashi約12年前に更新

  • ステータスNew(新規) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 c50557e901d77633db2b1812b2c7041a3ca045c5 で適用されました。

#3 Maki Takahashi約12年前に更新

  • 担当者Shingo Yamada から Maki Takahashi に変更
  • 3.6 で発生するかUnknown (未調査) にセット
  • 3.4 で発生するかUnknown (未調査) にセット

#4 Maki Takahashi約12年前に更新

  • 3.6 で発生するかUnknown (未調査) から Yes (はい) に変更
  • 3.4 で発生するかUnknown (未調査) から Yes (はい) に変更

curlコマンドではなぜか404エラーとなってしまうため、telnetにて確認しました。

telnet sns.example.com 80

GET /api.php/feeds/member/1 HTTP/1.1
Host: sns.example.com
HTTP/1.1 200 OK

=== (省略) ===

401 Unauthorized

#5 Maki Takahashi約12年前に更新

  • 説明 を更新 (diff)

#6 Kousuke Ebihara約12年前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更
  • 修正前のコードにも言えることですが、自前で header() 関数をコールするよりも sfWebResponse::sendHttpHeaders() をコールする形にするのが望ましいです。
    • その場合、 Content-Type ヘッダが新たに出力されるようになると思われます。この値は text/html がデフォルトです。 OpenPNE Web API、 Google Data API、 Atom Publishing Protocol (RFC 5023) の仕様書のいずれにもエラー時のレスポンスの Content-Type についての記述がありません。 text/plain を採用するのが妥当かもしれませんね。
  • レスポンスボディへのステータスコードの出力が削除されていますが、これはなぜでしょうか。 RFC 5023 の "5.5. Use of HTTP Response Codes" http://tools.ietf.org/html/rfc5023#section-5.5 には、以下のような記述があります。
       Implementers are asked to note that according to the HTTP
       specification, HTTP 4xx and 5xx response entities SHOULD include a
       human-readable explanation of the error.
    
       (拙訳)HTTP 仕様に基づき、 HTTP 4xx と 5xx のレスポンスエンティティは human-readable なエラーの説明を含むべき (SHOULD) であることに注意することが実装者に求められている。
    

    要求レベルが RFC 2119 で定められた SHOULD であるので、この仕様に反した実装をするからには、仕様を退けるべき妥当な理由が必要だと考えます。
    • また、この変更は、仕様に反しているだけでなく、互換性の観点からも問題があると考えています。この修正以前はステータスコードからエラーであるかどうかの判断がおこなえなかったわけですから、レスポンスボディからステータスコードを得て、エラーについての判別をおこなっていた可能性が充分に考えられます。これのレスポンスボディは利便のための配慮で、 RFC 5023 においてさえも明示された仕様ではないため、この変更をおこなうことにより意図した挙動をおこなわなくなるようなアプリケーションは、そのアプリケーション側で修正をおこなうべきと言えるとは思います。とはいえ、特段理由がないのならば後方互換性を保つような実装を維持するのが妥当だと考えます

#7 Maki Takahashi約12年前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

更新履歴 6a717dbea7857a13095033077f68f6416d180ec3 で適用されました。

#8 Kousuke Ebihara約12年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#9 Yuma Sakata約12年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

#10 kaoru n8年以上前に更新

  • 3.8 で発生するかUnknown (未調査) にセット

他の形式にエクスポート: Atom PDF