2

ペイロードで参照URIを返す必要があるモジュールがあります。SSL接続を介して呼び出される場合は、httpsプレフィックスを持つURIを作成する必要があります。リクエストからポート番号を簡単に取得できますが、問題は、ユーザーがSSL用の任意のポートを選択できた可能性があることです(実際、この特定のApacheインスタンスは常に非標準のSSLポートで始まります)。

リクエスト構造内の解析されたURIはすべて、すでにhttp/httpsプレフィックスが削除されています。r-> server-> defn_nameフィールドに頼ることを考えています。このフィールドには、リクエストの仮想サーバーのconfファイルが実際に含まれています。それがhttpd-ssl.confで終わっているのを見ると、これはSSL接続であると推測できます。それでもハックのように感じます。実際には、ユーザーはそのconfファイルに別の名前を付けることができ、このアプローチを破ることになります。

別のアプローチは、構成ファイルを読み取ってSSL VirtualHost Listenポートを見つけることですが、私もこれを達成できませんでした。

リクエストがhttps経由で行われたかどうかを判断する非常に簡単な方法がないようですが、request_recから利用できるすべての構造をスキャンしたので、明らかなものは何も表示されません。

4

1 に答える 1

3

httpd.hヘッダーファイルには、リクエストのスキームを提供する優れた関数が定義されています。

if (apr_strnatcmp(ap_http_scheme(r), "https") == 0) {
    ssl = TRUE;    
} else {
    ssl = FALSE;
}
于 2010-11-14T06:18:22.567 に答える