2013-10-21 59 views
3

在我的網站上,我有一個註冊頁面,它使AJAX請求檢查輸入用戶名後是否可用。這個文件叫做check.php,並且和registration.php文件位於同一個目錄下。當數據發佈到check.php時,它將在MySQL數據庫上執行查詢,並返回用該用戶名查找的用戶數。如何驗證對PHP文件的AJAX請求?

如果有人將數據發佈到check.php文件,他們也會看到結果。我需要以某種方式阻止它,我已經閱讀了幾個我需要「驗證」每個請求的答案。這可能是一個非常大的話題,雖然我不太確定搜索什麼來找到更多關於它的內容。驗證每個請求是一種阻止不必要的用戶名檢查的好方法嗎?如果是這樣,我會非常感激,如果任何人都可以指出我如何做到這一點的正確方向。

+1

由於您在註冊頁面上使用它,我假設「合法」使用此PHP的「用戶」不是註冊客戶?所以_anyone_可以進入你的頁面並執行一些輸入並獲得回報。如果那是真的,那麼「保護」它有什麼意義? – Passerby

+0

@Passerby你說得對,我用了一個愚蠢的例子。爲了這個問題的目的,如果你可以認爲這確實需要保護,我將不勝感激。 :) – jskidd3

回答

2

常見問題解答: - 由於AJAX只是一個HTTP請求,因此無法防止這種情況發生。無論您如何保護您的服務器,它都可以發送。所以如果重點是 - 保護免受「黑客」的侵害,那麼就沒有辦法做到這一點。正確的做法是檢查/驗證服務器端的任何內容。

但是,它是關於只有基本的檢查,你可以閱讀

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest') 

- 但要知道 - 這也是一個數據,這些數據來自客戶即它不能被信任(實際上,這是隻是HTTP請求頭,沒有更多)

+0

感謝您的回答。這是否完全安全,就像你說的HTTP請求可以被正確操作?有沒有辦法解決這個問題? – jskidd3

+0

就像我說的。你可以只做_basic check_ - 但你不能依賴來自客戶端的任何數據。你必須對自己說:**所有的客戶數據都是邪惡的,他們都是邪惡的黑客!** - 並按照這一點行事。 –

+0

完全是我的觀點,這個解決方案很好,但不會像所有用戶那樣對待黑客。我可能是黑客並操縱HTTP請求,那麼這個解決方案將毫無價值? – jskidd3

0

我想你可以創建一個會話變量,當你aplication和用戶登錄檢查是否這個變量已磨片發佈你的東西你「check.php」文件來檢查,如果你的用戶是以前身份驗證

正確的值
0

缺少大量的信息,但在概念上我不確定你是否擔心真正的風險。底線是人們可以使用你的表格來檢查電子郵件是否存在,因此它也可以使用check.php。嘗試並防止這種做法過於矯枉過正。

+0

好吧,但概念仍然存在,如果這是另一個需要認證的文件,然後呢? – jskidd3

+0

一旦你通過了登錄,那麼你可以通過會話信息或嵌入請求中的信息來驗證每個請求。例如,如果您正在編寫API,則可以在每個請求中包含用戶名和密碼,或者如果您要顯示用戶特定信息,則可以查看會話信息。如果身份驗證失敗,則您拒絕該請求並說有登錄名/密碼不匹配。 – Mika

0

我有一個想法 - 您可以生成一些獨特的令牌,在顯示頁面之前將其存儲在SESSION中。在每次檢查時,您必須添加此令牌以請求。 check.php必須重新生成令牌並將其重新返回。

但是,每個請求都可以模擬,並且不會保護您免受人們的攻擊,因爲他們想知道check.php的結果。沒有保護...

您也可以讓機構分析檢查

7

一個解決方案的IP請求生成會話唯一的令牌,並把它放在將包含一個表單的所有頁面。在您製作的每個AJAX請求上發佈此令牌。 它被稱爲CSRF保護,跨網站請求僞造

您可以添加保護層,檢查HTTP標頭中的用戶引用程序。

+1

你有沒有一個鏈接,你可能會支持這一點?這聽起來像一個很好的答案,但需要閱讀更多關於它的信息。 – jskidd3

+1

這將是用於檢查來自其他域的請求的解決方案。但經過身份驗證的有效用戶仍然可以輕鬆打破這一點。 –