[問題] 如何防止發文或留言的內容執行 script?

看板Ajax作者 (mchen11)時間8年前 (2015/07/29 21:40), 8年前編輯推噓4(407)
留言11則, 5人參與, 最新討論串1/1
例如像論壇這樣的環境,發文者或留言者的內容,若是惡意藏有 js 的話,請問要如何防止? 假設內容有 <script> 標籤的話比較簡單,在發文者送出內容之前, 用正規表示式就能偵測到並移除。不過怕是在 html 標籤裡面放事件, 例如: <img src="" onload="執行的 script"/> 這樣就可以偷渡 script 了。不曉得 js 有沒有什麼寫法,可以在送出 內容之前,過濾掉所有的事件語法,或是其他的處理方式呢?謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.165.31.50 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1438177200.A.F58.html

07/29 22:14, , 1F
直接送出去後,在後端做htmlspecialchars之類的就可以了吧
07/29 22:14, 1F

07/29 22:16, , 2F
轉成替代字元,他打角括號你就讓他顯示角括號就可以了。
07/29 22:16, 2F
這樣不行吧? <img..../> 變成 &lt;img.../&gt; 圖片就不能顯示了...@@"

07/30 04:24, , 3F
如果你想讓他可以輸入某些tag其實也有現成的處理lib可以
07/30 04:24, 3F

07/30 04:24, , 4F
幫你'消毒',保留你允許的標籤和屬性
07/30 04:24, 4F
※ 編輯: mchen11 (118.165.6.172), 07/30/2015 09:23:18

07/30 09:42, , 5F
你可以自己規範比如說圖片要用 [img]src[/img],自己轉
07/30 09:42, 5F

07/30 09:43, , 6F
然後使用上面的encode不允許使用者使用HTML標籤
07/30 09:43, 6F

07/30 09:44, , 7F
這樣一來出現的一定都是你允許的內容
07/30 09:44, 7F

07/30 17:09, , 8F
或者就直接使用已有的類似編碼規範例如 BBCode 等
07/30 17:09, 8F


07/30 18:23, , 10F
像這種的,可以白名單你允許用的東西
07/30 18:23, 10F

07/30 18:24, , 11F
不過server還是要再跑一次,你不能相信client給的東西
07/30 18:24, 11F
文章代碼(AID): #1LkDUmzO (Ajax)