2015-01-01 109 views
0

我有一個新聞訂閱系統,我想拒絕訪問某些文件(例如訂閱用戶的腳本)。我碰到的問題是,我需要拒絕來自外部任何人的文件訪問,但腳本需要訪問對方。拒絕訪問服務器上的某些文件

例如,我有以下文件:

  • 的index.html
  • subscribe.php

這應該是不可能通過輸入相應的URL來訪問subscribe.php。但是,index.html需要能夠將輸入到表單中的數據發送到subscribe.php。

這裏是我試過到目前爲止:

我在根目錄下留下的index.html,搬到subscribe.php受限的文件夾/。我將文件.htaccess添加到受限制的文件夾中。的.htaccess只包含:deny from all

這給了我一個403錯誤,當我試圖通過URL來訪問subscribe.php,但它也給了我同樣的錯誤,當我在index.html的提交表單

我的問題:我的.htaccess文件需要看起來像存檔我想要什麼,爲什麼我嘗試不工作?

回答

1

我遇到的問題是,我需要拒絕訪問文件 任何來自外部的,但腳本需要有 互相訪問。

你是錯的;這不是跟你後來說的話是一致的:

我遇到的問題是,我需要拒絕訪問文件 任何來自外部的,但腳本需要有 互相訪問。

未提交表格; 客戶端的瀏覽器正在提交帶有Web請求的表單。不要這樣想:

index.html需要能夠將輸入到 表格中的數據發送到subscribe.php。

這並非如此。 index.html包含html,當在客戶端瀏覽器上呈現時,它會指示瀏覽器在何處以及如何提交註冊表單。

有幾件事情,你可以嘗試:

  • 形式通常有POST請求提交。您可以編寫subscribe.php來阻止GET請求並期望提交適當的表單提交信息
  • 可以檢查Referer [sic]標頭以確保引用網頁確實是您的'index.html';但要警告的是,這與任何具有已知價值的http標題一樣,都是微不足道的。
  • PHP會話可用於在發佈提交表單之前跟蹤客戶對index.html的訪問。 PHP會話(通常)使用客戶端cookie來存儲會話「令牌」,然後在服務器端將其與存儲在文件或會話高速緩存中的信息散列相關聯。編程良好時,客戶端永遠無法訪問此數據,因此只有在會話中爲其設置會話變量「HasVisitedIndex」或任何設置時才能獲得該數據。

可能還有其他解決方案,但正如您所看到的,由於HTTP的無狀態客戶端 - 服務器模型,它們都不是完整的滿貫扣籃。

+0

我知道我的方法不起作用,因爲客戶端瀏覽器總是需要訪問腳本? – Lupy

+0

是的。 subscribe.php的訪問基本上與index.html - 或任何其他HTTP資源相同。 _client_訪問資源,並且您的PHP在_server_上運行以呈現頁面,處理輸入(例如註冊,訪問數據庫等) - 所有這些完成運行_before_結果然後作爲HTTP響應發送回客戶端。 –

+0

Farrel謝謝,這清除了一切!還有一個問題:我有一個config.php文件,其中包含了連接到我的數據庫的所有詳細信息,除了包含數據之外,它不執行任何操作。如果客戶端可以訪問該文件,是否存在任何安全問題? – Lupy