2012-09-21 139 views
-1

您好所有,PHP後端/前端安全

同時利用我的時間在洗澡時我雖然的一些有趣的事情。在PHP中,你怎麼知道,如果提交用戶的形式是有效的,而不是欺詐(即一些其他形式的其他網站用行動=‘http://mysite.com/sendData.php’)?因爲真的,任何人都可以創建一個表單,嘗試在真正的後端發送和匹配$ _POST變量。我怎樣才能確保腳本是合法的(從我的網站,只有我的網站),所以我沒有某種形式的克隆站點數據竊取的事情怎麼回事?

我有一些想法,但不知道從哪裏開始

  • 生成隱藏的輸入字段
  • 嘗試(但可能)一次性密鑰和商店搶了表單所在的URL (大概是不可能的)
  • 使用了一些非常複雜的PHP好吃的東西來確定數據發送(可能)

任何想法?謝謝大家!

+0

隨機一次性密鑰是要走的路。不要試圖檢查請求來自哪裏,即使有些方法可以很容易地被欺騙。 – Mahn

+0

這是有據可查的,一個簡單的Google搜索將爲您提供大量有關該主題的信息。即使您知道數據來自哪裏,編輯頁面的HTML也非常容易。最好的辦法是驗證服務器端的所有數據,如果你正確地做到了,它的來源應該無關緊要。 –

+0

大聲笑好吧一次性密鑰和會話哈希無處不在..但爲什麼-1? XD –

回答

1

大多數黑客這些嘗試將捲曲使用。用curl來更換提名代理很容易。你甚至可以用捲曲設置曲奇。但欺騙md5散列密鑰與私人鹽並將其存儲在會話數據將阻止大多數普通黑客和機器人。保持存儲在數據庫中的密鑰將增加認證。

0

有喜歡的幾個簡單的方法:

  • 檢查$_SERVER['HTTP_REFERER'],以確保您的主機是指腳本
  • 添加的形式哈希鍵,並存儲在服務器會話變量檢查它們。

但上述所有可以被操縱,並以某種方式欺騙。因此,您可以使用CSRF驗證。這是一個非常好的article。我曾經遇到過

其他附加技術:

  • 添加時限,形式和確保他們在那段時間與提交。
  • 在與形式的每一次互動,發送AJAX請求驗證和反應形式的時限。
+0

HTTP_REFERER可以很容易被客戶欺騙 –

+0

好吧我得到它>一次性密鑰/哈希會話變量..哈哈 –

0

HTML5提供了新的輸入類型。該元素的目的是提供一種安全的方式來驗證用戶。該標籤指定了表單中的密鑰對生成器字段。

表單提交時,會生成兩個密鑰,一個是私鑰,另一個是公鑰。

私鑰存儲在本地,公鑰發送到服務器。公鑰可用於生成客戶端證書,以便將來對用戶進行身份驗證。

Keygen tag in HTML5

RFC