在我開始討論這個問題之前,讓我解釋一下我們如何設置事物。Ajax內部的wordpress安全
我們有一個proxy.php文件,其中類代理已與在休息創建/編輯/獲取WordPress的職位,領域等
然後調用函數的定義,我們有一個proxyhandler.php,其中Proxy類被初始化並充當proxy.php和JavaScript文件之間的句柄。
在JavaScript文件中,我們有一個ajax調用proxyhandler.php,我們發送我們的祕密和其他數據。
現在,問題出現在這裏: 我們通過使用md5自定義字符串+時間戳記來定義祕密,通過wp_localize_script。我們通過ajax發送經過描述的字符串和時間戳記到代理處理程序,在那裏我們使用先前的(硬編碼的內部代理處理程序)字符串和時間戳記再次生成一個md5字符串,然後檢查針對所生成的字符串發送的那個字符串。如果他們是一樣的,我們會繼續做任何要求的事情,如果他們不合適的話,我們只是回到祕密不匹配。
現在真正的問題來了 - 通過使用wp_localize_script,祕密的變量是全局的,任何人都可以通過開發工具使用它,並可以發送任何ajax請求到他們想要的代理處理器。
什麼是正確的程序,使其更安全?我們已經這樣想了: 我們不是使用wp_localize_script,而是將腳本放在一個php文件中,我們使用一個php變量定義祕密,然後簡單地將祕密文件回顯到ajax中。這是否可行?還是有其他方法?
但是每個人都可以看到_ajax_nonce,因爲它是在HTML內部打印的,所以如果你知道如何從控制檯手動調用ajax,你可以提供這個隨機數並通過? (ajax不限於登錄用戶) – trainoasis
@trainoasis這只是nonce動作名稱。真正的是哈希和隱形。您可以查看[wp_verify_nonce()](https://developer.wordpress.org/reference/functions/wp_verify_nonce/#source-code)瞭解更多信息。 – MinhTri