2015-06-16 82 views
3

我正在開發一個完全位於防火牆後面的SF2 web應用程序:在記錄日誌(當然除了登錄表單)之前,任何人都不應該能夠看到或修改任何東西。Symfony2防火牆:protect/web文件夾

因此,這裏是我的security.yml文件的firewall部分:

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    main_login: 
     pattern: ^/login$ 
     anonymous: true 
    main: 
     pattern:  ^/ 
     anonymous:  false 
     form_login: 
      login_path: fos_user_security_login 
      check_path: fos_user_security_check 
     logout: 
      path:  fos_user_security_logout 
      target: /

這工作正常:如果我輸入網址http://mywebsite.com/app.php/article/show/1而未登錄,我轉發到登錄頁面。

我的問題是,我有一些文件和媒體文件位於的Symfony的web目錄(例如myapp/web/document/myTextFile.txt)。他們可以通過我的應用程序訪問登錄用戶,但也可以用於未登錄用戶

如果誰類型http://mywebsite.com/app.php/document/myTextFile.txt可以下載文件...

爲什麼不pattern: ^/線防止這種情況?默認排除web文件夾,因爲它包含app.phpjs/css/文件夾?

如何保護我的文檔?


更新:顯示受保護的圖像

我試圖通過格里提出的解決方案,它工作正常,以保護我的文檔的下載。

但是,我也在我的document文件夾中有圖片,我想顯示這些圖片,直接包含在相關頁面中。

例如,在http://mywebsite.com/app.php/article/show/1會有一些文字和圖片myapp/app/Resources/document/AAA.jpg,並在http://mywebsite.com/app.php/article/show/2會有一些文字和圖片myapp/app/Resources/document/BBB.jpg

我試着用Assetic做到這一點,但它似乎是爲「靜態」圖像完成的(如頂部標誌或不依賴於對象的圖像)。

一個解決方案,我看到的是,將圖像轉換爲Base64,包括像這樣:<img alt="" src="data:image/png;base64(...)" />,但似乎真難看......

+0

我覺得這個話題#1可以幫助你 [http://stackoverflow.com/questions/12148272/assetic-files-in-symfony-are-behind-the-firewall][1] [1 ]:http://stackoverflow.com/questions/12148272/assetic-files-in-symfony-are-behind-the-firewall –

+0

你爲什麼不直接上傳你的圖片到src/My/MyBundle/Resources/public '? – D4V1D

+0

那麼我應該在我的圖像的'src'('')中放什麼?因爲如果我把''和'app/console assetic:dump'或'app/console assets:install'放在一起,'app/Resources/documents'文件夾的內容將被複制(或者符號鏈接)回到'web/'! – Blacksad

回答

1

Web目錄是您的公共根目錄,由Web服務器(Apache/Nginx/...)提供服務。

默認情況下,對現有文件的任何請求都不會傳遞Symfony,因此沒有防火牆設置將阻止訪問駐留在Web根目錄中的文件。

乾淨的解決方案是將這些文件移到webroot之外的另一個目錄,例如app/Resources/uploads。然後你可以編寫一個Symfony控制器來下載這些文件。

+0

謝謝。請參閱我的編輯:我詳細介紹了我的一些需求。 – Blacksad

+0

它適用於任何類型的文件,也是圖像。從控制器提供它們時,請確保設置正確的Content-Type標頭。 – Gerry

+0

要下載它們,好吧,我試過了,它可以用於圖像以及任何其他文檔。但是如何在頁面內顯示它們? – Blacksad

0

我沒有Symfony的有效安裝的權利,但嘗試如果防火牆能夠繼續運行,則可以將文檔從Web上移除。

請讓我知道答案,如果找不到解決方案,或者您無法在生產中移動這些文件,請嘗試找出解決方案。

+0

我應該在哪裏移動它們?在'app /'中?如果他們在這裏,我如何訪問他們?僅供參考,我使用[這裏描述的方法](http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html)上傳我的文件 – Blacksad

+0

哦,我忘了Symfony的結構。 –

+0

嗯,不知道任何解決方案,也許htaccess? –