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

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