2012-08-28 77 views
0

時,我已經寫HTML使用jQuery過去,爲了訪問特定的PHP頁面我只是一直在做這樣的:PHP和AJAX安全

user.php?Action=1&User=Adrian..... 

,這將返回純文本JSON,其中jQuery的轉換到一個JavaScript對象。不過,我有幾個有關這種方法的問題。

  1. 這安全嗎? JSON以純文本形式傳回。它是否應該通過HTTPS使用?
  2. 防止直接訪問PHP的最佳方法是什麼?只需檢查活動會話?
  3. 這整個方法好嗎?

乾杯, 阿德里安

+1

驗證在PHP活動會話,或者如果必要的登錄。如果您的任何數據都很敏感,那麼您應該只通過SSL提供服務。還考慮使用通過AJAX請求發送的令牌來防止跨站點請求僞造。將XSRF標記值與PHP會話進行比較。 –

+0

你爲什麼要防止直接訪問PHP? (首先,這是不可能的 - 如果Ajax可以訪問它,用戶就可以訪問它。)如果出於安全考慮,你有一個漏洞。另外,你爲什麼要通過HTTPS?裏面有敏感數據嗎? – Ryan

回答

1

對於2號,這取決於你在做什麼。

如果您對'user.php'文件做任何修改數據庫的操作,您都希望使用POST而不是GET(這會隱藏URL欄中的參數,並且如果您的頁面被抓取/抓取)。

使用POST,你user.php的文件,$_POST取代的$_GET實例。

在你的jQuery Ajax調用,確保參數的「類型」設置爲「POST」

type: "POST",

GET請求只應該永遠是做任何事情,獲取並從你的數據模型顯示的數據( DB,不管)。 POST請求用於進行任何更新,添加(更嚴格是PUT)或刪除(DELETE)。

如果只希望特定用戶訪問user.php的腳本,然後你想檢查用戶的會話,並確保其與用戶試圖訪問特定用戶參數相匹配。

0

1)這取決於你要轉移什麼。如果您通過HTTPS傳輸信用卡數據,當然。如果您傳輸的敏感度較低,可能不是。

2和3)確保您檢查您輸入的SQL注入,就像你使用任何$ _GET變量。你應該真正對待它,你通常會如何處理$ _GET數據

0

每當我允許JSON/crud訪問時,我總是確保爲它提供服務的PHP頁面(user.php)落後於基於會話的訪問控制規則(角色基於或基於組的權限)。然後我列出允許用戶/組/角色訪問哪些表/字段。複雜程度取決於所服務數據的性質。