2015-10-08 45 views
1

被送到我(在同一臺服務器2個不同的子域)發送從表單一些重要的信息在1個網站到另一個。由於接收端位於不同的子域,所以我不能讓它需要登錄(就像我會在相同的情況下一樣),並且這會使我的接收端非常脆弱,因爲它可以輕鬆地從另一個地方調用這是繞過我的表單(這是非常糟糕的)。跨服務器的表單數據以安全的方式

我怎樣才能讓這個更安全?我可以令牌一起發送某種安全與我的形成不能被攔截(因爲我想如果$ _POST數組只包含一個安全令牌它可以很容易被截獲使其失去作用。糾正我,如果我錯了這裏)或可能會限制接收端只接受來自特定位置的數據(如特定的url或IP)?

這是一個重要的項目,所以我不介意它會矯枉過正的安全性在裏面。

回答

0

我會採取一個簡單的方法:

  1. 形式是子域A,讓說a.domain.com/form.php
  2. 表單提交數據到同一子,甚至腳本(爲什麼不)),a.domain.com/form.php
  3. form.php使用cURL向b.domain.com/targetForm.php發送POST請求
  4. b.domain.com/targetForm.php只接受請求從b.domain.com的IP,或者類似的東西

你仍然可以要求用戶通過這種方式在a.domain.com先登錄才能提交表單,而當一切都OK,然後將數據推送到b.domain.com/targetForm.php,你」 d只接受來自a.domain.com的請求。

+0

我正在做前3個步驟,但發送使用此方法的發佈數據,而不是(http://stackoverflow.com/questions/5647461/how-do-i-send-a-post-request-with-php )。我的問題是完全與第4步。你能告訴我一個好的方法來限制targetForm.php接收信息只從a.domain.com/form.php或它的IP? – Decorayah

+1

您應該能夠在$ _SERVER ['REMOTE_ADDR']'(在您提交數據的腳本處的遠程服務器IP)處看到IP。另外,例如,如果兩個子域都可以訪問同一個數據庫服務器,那麼您還可以傳遞一些信息,以便在目標子域中使用,以便對用戶進行身份驗證(某種令牌,會話ID等等)。 –

2

我不能讓它要求

是的,你可以在登錄。跨域的單點登錄是一個很好記錄的問題,你甚至沒有處理多個域。它是even easier across subdomains

我可以令牌一起發送某種安全與我的形式

是。生成令牌。將其存儲在服務器上。把它放在表格中。提交表單。

無法被攔截

提交表單通過SSL。 (除非你的意思是你想要存儲控制瀏覽器的人攔截它,在這種情況下你運氣不好,如果你通過瀏覽器發送數據,那麼你將它放在瀏覽器的主人。如果你不能信任他們,那麼你可以不相信數據。)


你能告訴我的一個好辦法,targetForm.php限制只從一個接收信息。 domain.com/form.php還是它的IP?

您正在尋找針對CSRF的防禦。您需要在子域名之間實施會話(您可以執行此操作,請參閱上述有關cookie的註釋),然後使用synchroniser token(您在表單和會話中存儲的內容,然後在form.php中比較)。

相關問題