2010-08-05 101 views
0

如何確保攻擊者或垃圾郵件發送者不會試圖從http://localhost計算機發送數據?我正在開發Flex/Flash應用程序,然後將數據提交給PHP。我知道他們有能力反編譯actionscript,HTTP_REFERER會有幫助嗎?php檢查表單提交url

回答

0

你可以使用referrer,但即使這樣也可能被欺騙。如果是我,我會sha1()一些隨機字符串或閃存中的東西,並通過與您的窗體,然後你可以在PHP端sha1()並檢查它們。

也許你甚至可以讓動態的東西,像

sha1(date('Y-m-d')."MySaltPhrase"); 
+0

如果有人反編譯閃光燈,那麼它可以仍然是惡搞? – proyb3 2010-08-05 13:24:52

+0

是的,它可以被發現。通過查看網絡流量也可以找到有效的值。在這個例子中,垃圾郵件發送者需要手動提交表單以找到魔術鍵,然後可以在腳本的剩餘時間使用該鍵。 – 2010-08-05 13:27:53

+0

是的,如果你寫了一個自定義算法或其他東西,那麼你可以用更加動態的東西代替它。但是,您需要Flash和PHP中的相同內容。那麼你可以在每次提交時更改密鑰:) – 2010-08-05 14:32:43

0

parse_url()與字符串操作相結合應該工作。試試這個:

$url = parse_url($_SERVER['HTTP_REFERER']); 
$host = implode('.',array_slice(explode('.',$url['host']),-2)); 

if (strtolower($host) == 'google.com') { 
// code...... 
} 
+0

HTTP_REFERER可以手動設置,因此您的解決方案不是水密的。 – Deefjuh 2010-08-05 13:29:20

+0

@Deefjuh:那麼?你的解決方案是什麼? – Sarfraz 2010-08-05 13:31:42

1

並非所有瀏覽器提供HTTP_REFERER,它可以很容易地被欺騙,所以它不會保護您的形式。

您可以做的最好的事情,也是您唯一可以做的事情是確保您的PHP代碼不信任任何輸入。您應該檢查提交給您的表單的任何值是否在可接受的值範圍內,如果適用,請仔細檢查登錄信息等。

如果您擔心機器人,請使用recaptcha或限制任何IP的提交數量地址爲3分鐘(例如 - 爲您的情況選擇適當的速度)。

簡而言之:您永遠無法確定表單提交的起源地點。您必須準備好處理來自攻擊者的提交內容。

+0

我完成了所有。但SSL有幫助嗎? – proyb3 2010-08-05 13:32:21

+0

如果你這樣做了,你擔心什麼?你認爲你可能容易受到什麼樣的攻擊? – 2010-08-05 13:33:51

0

使用驗證碼進行驗證。在提交表單時,您無法確定源或引用來源是本地主機還是公共IP地址。您將看到的本地主機是您自己的。

0

答案很簡單 - 你不行。
因爲每個表單實際上是從用戶的本地計算機發送的。這是HTML的東西,你最好明白這一點。將爲您節省大量的時間。

一般來說,你根本不需要任何保護。 但是對於一些特殊情況下的保護策略會有所不同

  • ,以防止垃圾郵件使用CAPTCHA
  • 防止CSRF利用獨特的標記,同時存儲在會話和窗體的隱藏字段
  • 添加自己的特定任務這裏得到一個特定的保護方法。從你想捍衛什麼攻擊?