質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.69%

Apacheのクロスドメイン設定:一部のサブドメイン以外を非許可に設定

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 4
  • VIEW 4,771

tama_yn0815

score 127

この問題、IT業界3年生には....少し、ハイレベルなため、力を貸してほしいです。

条件
サーバーサイド:筐体上に存在するドメイン以外のアクセスを弾く
フロントサイド:ajax(xhr)通信で非同期にcgiの結果を取得

状況
設定を書き込んでいるはずが、実質
header append Access-Control-Allow-Origin = '*'
と同じ挙動で、どのドメインからでもアクセスできる。

ソース
.htaccess

SetEnvIf Origin "^https?://(www\..*\.subdomain\.co\.jp|012.345.678.910:80)$" http_origin=$0
Header set Access-Control-Allow-Origin %{http_origin}e env=http_origin

jabascript

$.ajax({
    url:'//www.abcd.subdomain.co.jp/cgi-bin/Suggest.cgi',
    type:'get',
    cache:false,
    dataType:'json'
});

やりたいこと
1.Apacheの.htaccessで指定されたorigin以外からのアクセスを弾きたい
2.設定するoriginは、IFのような条件分岐で、正規表現とmatchする場合のみ値を返すようにしたい

このような感じです。

本日は、これで業務を終了しますので、明日、回答を読ませていただきたいと思います。
お急ぎでレスを投げて下さる方もいらっしゃるかとは、思いますが、
何卒、ご容赦くださいませ。

追記
おはようございます。
本文中に一部、誤字脱字がありましたので、修正加筆致しました。


以下、情報整理

一度、整理致します。

ソース
.htaccess

SetEnvIf Origin "^https?://(www\..*\.subdomain\.co\.jp|012.345.678.910:80)$" http_origin=$0
Header set Access-Control-Allow-Origin %{http_origin}e env=http_origin


javaScript

$.ajax({
    url:'//www.dcba.subdomain.co.jp/cgi-bin/Suggest.cgi',
    type:'get',
    cache:false,
    dataType:'json'
});

headerの内容
・指定外(つもり?)のオリジンからのアクセス

  • request heddas
    1.Request URL:http://www.dcba.subdomain.co.jp/cgi-bin/Suggest.cgi?_=0123456789
    2.origin:http://hogehoge.jp
  • response headers
    1.Access-Control-Allow-Origin:http://hogehoge.jp
  • コンソールログ
    1.XMLHttpRequest cannot load http://www.dcba.subdomain.co.jp/cgi-bin/Suggest.cgi?_=0123456789. Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers in preflight response.

・指定した(つもり?)のオリジンからのアクセス

  • request heddas
    1.Request URL:http://www.dcba.subdomain.co.jp/cgi-bin/Suggest.cgi?_=0123456789
    2.origin:http:www.abcd.subdomain.co.jp
  • response headers
    1.Access-Control-Allow-Origin:http:www.abcd.subdomain.co.jp
  • コンソールログ
    1.なし

以上が現状、出ている情報です。
過不足は、対処いたしますので、御申しつけ下さい。

ついては、この状態、上記しました"やりたいこと"が出来ている状態なのでしょうか?
お分かりになれば、ご回答をいただけると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

url:'//abcd.subdomain.co.jp/cgi-bin/Suggest.cgi'
このアクセスでは、Access-Control-Allow-Originヘッダーは付かなくないですか?

http(s)://www.(任意の文字).subdmain.co.jp
または
http(s)://012.345.678.910:80
しかAccess-Control-Allow-Originヘッダーを付けないことになってますが。

chromeなどのデベロッパーツールでヘッダーが確認できますので、見てみたらどうでしょうか。
もしかしたら、別のところで、Access-Control-Allow-Origin: *が指定されてません?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/12 17:58 編集

    回答、ありがとうございます。
    自分(指定された筐体)のサブドメインからは、アクセスできてます。

    念のため、ご説明すると、私の記述ミスです。
    ×url:'//abcd.subdomain.co.jp/cgi-bin/Suggest.cgi'

    ○url:'//www.abcd.subdomain.co.jp/cgi-bin/Suggest.cgi'

    また、Access-Control-Allow-Originの設定をしているのは、こちらのcgiが置かれている配下のみです。

    Access-Control-Allow-Originが付かないというのは、そもそも、サブドメイン以外のページからのアクセスを弾けていないってことでしょうか?
    すみません、もしかするとクロスドメインの概念を捉え違えているかもしれないです。

    ちなみに、外部(別ドメインのページ)から、ajaxで通信をするとヘッダーのレスポンスが、以下のようになっています。
    response headers
    Access-Control-Allow-Origin:http://hogehoge.jp

    request headers
    Origin:http://hogehoge.jp

    追記:
    すみません、今、確認できたのですが、
    XMLHttpRequest cannot load http://www.abcd.subdomain.co.jp/cgi-bin/Suggest.cgi?_=1234567890. Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers in preflight response.
    このエラーがコンソールに出るってことは、外(指定されたオリジン以外)からアクセスした時、サーバー側で処理を弾けているのでしょうか?

    後出しで、申し訳ないですが、ご教示願います。

    キャンセル

  • 2016/07/12 18:10

    それだと、どんなoriginでも読み込めちゃいます。
    httpd.confとかで、Access-Control-Allow-Originの設定を間違えて書いてないですかね?

    キャンセル

  • 2016/07/12 18:11

    あ、そうです。じゃあ、弾いているんじゃないですか?

    キャンセル

  • 2016/07/12 18:28 編集

    テスト...回答をお待ちください

    追記:質問本文中に、ラインを引いて、情報整理分とコメントを載せました。
    ご確認にお手数をおかけしますが、よろしくお願いいたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.69%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる