2013-03-08 71 views
0

所以我有一個JavaScript和PHP的Web應用程序。在我的應用程序中,有些時候JavaScript會調用POST請求來創建帖子。我想知道什麼是驗證我的請求以防止任何人訪問該URL的最佳方式。它不需要那麼靈活。我不會有多個應用程序。我只需要一個在php和JavaScript中的案例解決方案。驗證客戶端JavaScript事件的最佳方法

編輯:第二個問題。只是確保請求的URL來自足夠的URL?

+0

可能應該嘗試查看像node.js這樣的serverside javascript。 – 2013-03-08 07:02:15

+0

@DipeshParmar - 由於數據必須來自用戶,這是不實際的。 (除非OP希望網站上的所有內容由馬爾科夫文本生成器而不是人類編寫)。 – Quentin 2013-03-08 07:05:39

回答

2

你不能。

當你的JavaScript來自請求時,你可以做一些額外的事情,但由於你必須發送有關如何做到瀏覽器的指令,任何人都可以閱讀並複製它們以供自定義構建了非JS請求。

在WWW上,您可以驗證用戶身份(憑據),但是您無法驗證客戶端(除非您在編譯的包中提供客戶端軟件......即使這樣也不可靠,官方的Twitter客戶端授權密鑰是現在在野外)。

只是確保URL的請求來自足夠?

如果您的意思是「檢查referer頭」,那麼沒有。這是由客戶端設置的,客戶端可以將其設置爲任何他們喜歡的。

0

爲你的PHP文件的第一行您發送POST到你可以把此行腳本

<?php if (! defined('BASEPATH')) exit('Permission denied: direct access'); 

的頂部。

編輯 - >或類似的東西

if(!isset($_POST)) 
    { 
     die('no direct access allowed'); 
    } 
    else 
    { 

    //all your PHP code 

    } 

你也可以包括您自己的變量在後,並在使用它

isset($ _ POST [ '你變'])

檢查。

+0

目標是阻止人們訪問頁面,如果他們沒有用JS請求它的話,不要只在include()在另一個頁面中才能訪問頁面。 – Quentin 2013-03-08 07:03:19

+0

是的,謝謝昆汀。我想答案中的編輯應該達到目的。 – Archer 2013-03-08 07:08:34

1

最好的事情可能是建立一個PHP會話並將存儲在$ _SESSION中的標識發送給javascript。在每個AJAX POST中添加這個標識,並在服務器上檢查存儲在$ _SESSION中的內容。如果它們不匹配,那麼要麼是有人試圖操縱URL或CSRF。

如果您想阻止原始客戶端在會話中執行多個請求,您需要從服務器向客戶端發送一個突發號碼,該號碼只能使用一次。請參閱: http://en.wikipedia.org/wiki/Cryptographic_nonce

+0

所有這些數據仍然發送到客戶端,所以它可以用於客戶需要的任何目的。 – Quentin 2013-03-08 07:04:00

+0

使用nounce,他們至少只能做一次。他們必須「請求」將權限發送到服務器的權限。通過這種方式,您可以控制允許客戶端執行的操作,並且在沒有正確提示的情況下忽略請求。 – 2013-03-08 07:55:04

+0

而請求權限是另一個步驟,就是這樣。它可以像其他任何東西一樣自動化。 – Quentin 2013-03-08 09:04:10