2016-04-27 11 views
0

私はFlaskのウェブサイトを持ち、Ubuntu 14.04でmod_wsgi(3.4)とApache(2.4.7)を提供しています。仮想ホストの設定には、Flaskアプリ用のディレクトリブロックと、静的なファイルのディレクトリ用のディレクトリブロックの2つのディレクトリブロックがあり、Flaskアプリは時々XMLHttpRequest経由で取り出します。localhostからXMLHttpRequestを除くすべてのリクエストを拒否するようにApacheを設定するにはどうすればよいですか?

私は静的ファイルのディレクトリがFlaskアプリケーションからの要求にしかアクセスできないようにしたいと思いますが、これを行うためにApacheを設定する際に問題があります。私はRequire localRequire ip 127.0.0.1Require sd.d.comを試しましたが、それぞれがXMLHttpRequestの403になります。

[XMLHttpRequestは(そしてフラスコアプリと静的なディレクトリが同じサブドメイン、サーバーおよびポートにある)Require all grantedで正常に動作しますので、私はそれがCORSに関連する問題ではないと思う。]

ここに私ですApacheのconfファイル:

<VirtualHost *:80> 
    ServerName sd.d.com 
    WSGIDaemonProcess mag user=www-data group=www-data threads=5 python-path=/var/www/sd.d.com:/var/www/sd.d.com/venv/lib/python3.4/site-packages 
    WSGIProcessGroup mag 
    WSGIScriptAlias//var/www/sd.d.com/mag.wsgi 
    <Directory /var/www/sd.d.com> 
    Require all granted 
    </Directory> 
    Alias /models /var/www/sd.d.com/models 
    <Directory /var/www/sd.d.com/models> 
    Require local # Tried this 
    # Require ip 127.0.0.1 # Also tried this 
    # Require host sd.d.com # Also tried this 
    </Directory> 
    ErrorLog /var/www/sd.d.com/error.log 
    CustomLog /var/www/sd.d.com/access.log combined 
    LogLevel debug 
</VirtualHost> 

は、ここに403の後に私のaccess.logからのサンプルです:

02dec1b9.bb.sky.com - - [27/Apr/2016:19:02:49 +0000] "GET /models/cbc96411-aa47-4417-bea4-95943b98b1d3/cbc96411-aa47-4417-bea4-95943b98b1d3.stl HTTP/1.1" 403 581 "http://sd.d.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36" 

これが関連している場合はわからないが、私は期待していましたXMLHttpRequestは02dec1b9.bb.sky.comではなくlocalhostからの要求です。私のアクセスログファイルは以下のように設定されている:私のerror.logから

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "%h %l %u %t \"%r\" %>s %O" common 
LogFormat "%{Referer}i -> %U" referer 
LogFormat "%{User-agent}i" agent 

同じ失敗した要求:

[Wed Apr 27 19:02:49.381706 2016] [authz_core:error] [pid 18700:tid 140508152153856] [client 2.222.193.185:59865] AH01630: client denied by server configuration: /var/www/sd.d.com/models/cbc96411-aa47-4417-bea4-95943b98b1d3/cbc96411-aa47-4417-bea4-95943b98b1d3.stl, referer: http://sd.d.com/ 

どのように私は希望XMLHttpRequest除くすべての要求を拒否するようにApacheを設定することができますか?

更新

私はRequire all grantedにモデル/ディレクトリを設定した場合は成功XMLHttpRequestは2.222.193.185ではなく02dec1b9.bb.sky.comとして記録されます。

2.222.193.185 - - [28/Apr/2016:09:41:02 +0000] "GET /models/ca19d6ca-715e-4a0f-89f0-f5e3059f57ff/ca19d6ca-715e-4a0f-89f0-f5e3059f57ff.stl HTTP/1.1" 200 4426280 "http://sd.d.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36" 

答えて

0

私は現在よリファラーが自分のウェブサイトのドメインと一致する場合は、a variable in Apacheを設定してください。

<Directory /var/www/sd.d.com/models> 
    SetEnvIf Referer sd\.d\.com local_request 
    Require env local_request 
</Directory> 

私はrefererがなりすましをする可能性があることを知っていますが、これはおそらく私の目的のために十分安全です。

他の解決方法をお聞きしたいと思いますか?

関連する問題