所以我有一個JavaScript和PHP的Web應用程序。在我的應用程序中,有些時候JavaScript會調用POST請求來創建帖子。我想知道什麼是驗證我的請求以防止任何人訪問該URL的最佳方式。它不需要那麼靈活。我不會有多個應用程序。我只需要一個在php和JavaScript中的案例解決方案。驗證客戶端JavaScript事件的最佳方法
編輯:第二個問題。只是確保請求的URL來自足夠的URL?
所以我有一個JavaScript和PHP的Web應用程序。在我的應用程序中,有些時候JavaScript會調用POST請求來創建帖子。我想知道什麼是驗證我的請求以防止任何人訪問該URL的最佳方式。它不需要那麼靈活。我不會有多個應用程序。我只需要一個在php和JavaScript中的案例解決方案。驗證客戶端JavaScript事件的最佳方法
編輯:第二個問題。只是確保請求的URL來自足夠的URL?
你不能。
當你的JavaScript來自請求時,你可以做一些額外的事情,但由於你必須發送有關如何做到瀏覽器的指令,任何人都可以閱讀並複製它們以供自定義構建了非JS請求。
在WWW上,您可以驗證用戶身份(憑據),但是您無法驗證客戶端(除非您在編譯的包中提供客戶端軟件......即使這樣也不可靠,官方的Twitter客戶端授權密鑰是現在在野外)。
只是確保URL的請求來自足夠?
如果您的意思是「檢查referer頭」,那麼沒有。這是由客戶端設置的,客戶端可以將其設置爲任何他們喜歡的。
爲你的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 [ '你變'])
檢查。
最好的事情可能是建立一個PHP會話並將存儲在$ _SESSION中的標識發送給javascript。在每個AJAX POST中添加這個標識,並在服務器上檢查存儲在$ _SESSION中的內容。如果它們不匹配,那麼要麼是有人試圖操縱URL或CSRF。
如果您想阻止原始客戶端在會話中執行多個請求,您需要從服務器向客戶端發送一個突發號碼,該號碼只能使用一次。請參閱: http://en.wikipedia.org/wiki/Cryptographic_nonce
可能應該嘗試查看像node.js這樣的serverside javascript。 – 2013-03-08 07:02:15
@DipeshParmar - 由於數據必須來自用戶,這是不實際的。 (除非OP希望網站上的所有內容由馬爾科夫文本生成器而不是人類編寫)。 – Quentin 2013-03-08 07:05:39