例如,用戶提交的數(shù)據(jù)a < b方法1,存入數(shù)據(jù)庫時編碼,即存入的是a < b方法2,寫 Html 時編碼,即原樣存入數(shù)據(jù)庫a < b但在寫到頁面前,編碼成a < b我個人比較傾向方法1,因為 XSS 是瀏覽器誤會造成的,而后臺返回的數(shù)據(jù)不一定只給瀏覽器呀,其他客戶端(如手機APP)就不用擔(dān)心,這是其一;其二,如果這一列在 SELECT 時要比較的話,方法2 就要求比較的值也必須先編碼,否則不可能相等,如:WHERE c = 'a < b'這么寫肯定不行,因為數(shù)據(jù)庫存的是 'a < b'。所以,從純粹程序設(shè)計的角度講,方法2 總是假定客戶端是瀏覽器,不好。但是方法1 的問題是,如果每次寫到 html 時都要 “記得” 編碼,太容易忘!一旦忘記,也就埋下了安全隱患,對吧?所以您的建議是?
1 回答

30秒到達戰(zhàn)場
TA貢獻1828條經(jīng)驗 獲得超6個贊
我當(dāng)時寫過一個保存富文本的功能. 用的是方法2(必須保存html標(biāo)簽, 沒辦法), 富文本的內(nèi)容是方法1.
說到防xss, 我當(dāng)時是在頁面提交富文本的時候, 使用jsoup(java過濾xss攻擊腳本). 由于需要保存的是富文本. 所以到頁面渲染的時候, 不做轉(zhuǎn)義(富文本編輯后上傳的內(nèi)容都是轉(zhuǎn)義后的, 除了一些富文本生成的標(biāo)簽對).
假如不使用富文本的情況下, 方法1確實方便. 但富文本的情況, 需要查找html實體的時候, 就必須轉(zhuǎn)義了.
- 1 回答
- 0 關(guān)注
- 796 瀏覽
添加回答
舉報
0/150
提交
取消