我目前正在修復 CakePHP 3 應用程序。我遇到過一些允許將標簽插入數據庫的文本字段,這將允許用戶對系統中的其他用戶執行 XSS 攻擊。我提出了以下規則來應用于受影響的表對象中存在此問題的字段,以防止將 html 添加到數據庫中:public function validationDefault(Validator $validator){ ... $validator ->add('description', 'validFormat', [ 'rule' => array('custom', '/^[a-z0-9 ]*$/i'), 'message' => 'Input must not contain special characters.' ]); ...}然而,這有點限制,不允許在軟件的大量實際用例中使用標點符號和特殊字符。我想實現一個規則,為用戶提供最大的靈活性,將文本寫入此描述字段,但阻止他們輸入能夠利用 XSS 漏洞的代碼。這樣做的正確規則是什么?這似乎是 Cake 中的常見用例,框架中是否有一個預先存在的規則可以在不使用正則表達式的情況下執行此操作?我知道將這些字段的輸出打印為純文本是處理此問題的另一種解決方案,我也打算這樣做。盡管我也希望數據在輸入端也能正確格式化。
1 回答

蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
默認情況下,Cake 依賴于您在顯示用戶輸入時(而不是捕獲用戶輸入時)對其進行清理。他們自己的烘焙模板顯示,他們使用h()( 的簡寫)包裝用戶輸入值htmlspecialchars
,以防止 XSS:
<td><?=?h($example->description)??></td>
針對 XSS 清理輸入充滿了潛在的陷阱和復雜性,僅清理顯示的內容要簡單得多。它實際上不能用一行正則表達式來完成,也不會給您的用戶帶來過度的負擔(正如您所指出的,這樣他們就可以使用任何標點符號)。即使提供一組有限的標點符號仍然可能很危險。
請注意,h()
這只可以保護您免受基本的 HTML 注入(因此,在上面的示例中已經足夠好了)。在放置數據腳本標簽和其他某些情況時,您仍然需要考慮額外的保護。
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消