1 回答

TA貢獻1807條經驗 獲得超9個贊
這篇文章的簡短摘要和下面的討論:
首先將憑據發布到 PHP,然后在返回的 HTML 中將它們返回給客戶端,延遲(由于附加頁面負載)增加,PHP 被添加為另一個故障點并且理論上,該系統可能會面臨更多安全問題(即通過 JavaScript 或瀏覽器擴展掃描代碼或黑客攻擊 PHP 服務器)。
因此,有兩種解決方案是合理的:
完全跳過 PHP 并讓登錄由 javascript 和 < 處理僅 a i=4>java 后端(此過程的詳細說明說明如下 第 1 - 5 點;這僅是可能的,因為 PHP 服務器在此特定用例中不需要身份驗證信息< a i=11>)
將憑據 POST 到 PHP,并讓 PHP 與負責身份驗證的 java 后端通信將它們保留給客戶
原帖:
我不太明白為什么你認為 PHP 后端不可信,但在你的方案中,PHP 已經獲得了你的憑據,這要歸功于原始的 POST。如果您想避免使用 PHP,為什么不讓您的表單調用 JavaCcript 函數,而不是首先 POST 到 PHP 后端:
用戶輸入憑據
用戶點擊“登錄”
JavaScript 攔截登錄嘗試,調用login()
JavaScript 從文檔正文 () 獲取
user,pass
getElementById(...)
JavaScript 聯系處理登錄的 Java 后端
無需 PHP。但我可能想知道為什么這是必要的 - 如果您不能信任自己的后端,那么您的安全實踐到底是什么?如果你的 PHP 不可信,為什么你的 Java 會更好呢?
在您的方案中,您已經在 POST 請求中將憑據傳遞到 PHP 后端。如果您擔心 PHP 不知道憑據,那么您已經失敗了。
至于效率,您的方案有額外的頁面加載,這將使用帶寬,最大化延遲(而不是最小化延遲的目標),并且讓注意到額外重定向的用戶認為您無能。 JavaScript 聽起來更好的解決方案是您想用 Java 編寫數據庫代碼。
就 HTML 中顯示的憑據而言,實際上沒有區別,因為唯一可以訪問它們的人就是用戶(已經輸入了這些憑據的人)。如果他們輸入不正確的憑據,他們只會看到不正確的憑據。 也就是說,它違反了最佳實踐,而且可能不是一個好主意。
在 HTML 中顯示憑據是否是一種不好的安全做法(就像在 URL 中顯示憑據一樣,以防止用戶在復制 URL 時意外將其憑據發送給某人)?與此相關的風險是什么?這些憑證可以被任何使用的 JS 庫或瀏覽器擴展讀取嗎?如果是這樣,那些人可能也可以讀取我在表單中輸入的憑據?
答案是肯定的,這完全是不好的做法,會讓您面臨額外的風險。他們可能不太關心,但你說得完全正確——惡意代碼可以在更多地方讀取憑據,并且任何 JS 庫或安裝的擴展都可以讀取它們。
從安全角度(和效率角度)來看,我的替代設置是否更好?
不,不。從安全角度來看,它增加了另一個故障點;他們可以選擇破解 PHP 后端,而不是需要破解 Java 后端。這不一定是世界末日,但是一個額外的故障點。
在這種情況下還有其他提高安全性的建議嗎?
我在上面解釋了我的建議。要么接受它并使用 PHP,要么使用 JavaScript 完全繞過 PHP。
還有一件事,在處理登錄時,請確保 Java 傳遞一個秘密值(每個會話都是唯一的),并且服務器會在每個頁面加載時驗證該值< a i=2>.當我作為道德黑客工作時,我測試的應用程序通過了身份驗證令牌(OAuth2),但服務器實際上并未驗證它是否正確,只是客戶端說它是有效的。確保服務器檢查客戶端所做的任何事情。
此外,強調每個會話都是唯一的,因為每個會話都保持相同的秘密值肯定是保存最差的你曾經希望沒有泄露的秘密。
- 1 回答
- 0 關注
- 167 瀏覽
添加回答
舉報