我正在嘗試通過取消“script-src”指令中的“unsafe-inline”來使現(xiàn)有的 php web 應用程序符合 CSP當前的代碼(工作但僅由于 unsafe-inline ):// Currently - button in a php form <button type="submit" class="btn-dark" name="button_clearUser" onclick="return singleConfirm('Proceed ?')" >Clear Penalty</button> // js function in an external javascript filefunction singleConfirm( msg1 ) { if (confirm(msg1)) { return true; } else { return false; } }為了使上述完全符合 CSP,我嘗試了以下...// Amended - button in a php form - added class confirm <button type="submit" class="btn-dark confirm" name="button_clearUser" >Clear Penalty</button> // Amended - added a eventListener in the external js file// for class confirm document.addEventListener('DOMContentReady', function () { document.getElementsByClassName('confirm') .addEventListener('click', return singleConfirm(msg1));});上述修改無效。而且我在瀏覽器控制臺中沒有看到任何錯誤。我懷疑這是一個JS問題。請建議。................................... 下面的更新 ..................... .....................更新 3(剩下的唯一問題是,即使我單擊取消,表單仍然提交。使用 onclick 方法,使用“return”關(guān)鍵字。不確定如何在此處實現(xiàn)“return”概念):::修復了 ReferenceError:未定義 msg1function singleConfirm(msg1) { if (confirm(msg1)) { return true; } else { return false; } }document.addEventListener('DOMContentLoaded', function () { const elems = document.getElementsByClassName('confirm'); Array.prototype.forEach.call(elems, (elem) => { elem.addEventListener('click', () => singleConfirm('Proceed ?')); });});更新 2 :::用于 getElementsByClassName 的數(shù)組。通過此更新,我現(xiàn)在彈出一個模態(tài)窗口,但前提是我刪除了 msg1(給出 ReferenceError: msg1 is not defined )document.addEventListener('DOMContentLoaded', function () { const elems = document.getElementsByClassName('confirm'); Array.prototype.forEach.call(elems, (elem) => { elem.addEventListener('click', () => singleConfirm(msg1)); });});更新 1 :::替換為 DOMContentReady -> DOMContentLoaded document.addEventListener('DOMContentLoaded', function () { });
CSP 合規(guī)性 - 由于 JS 內(nèi)聯(lián)事件處理程序 (onclick) 而失敗
函數(shù)式編程
2023-04-21 15:14:29
