2020-10-11|閱讀時間 ‧ 約 4 分鐘

防禦XSS攻擊

1. 設定cookie為HttpOnly
在一般的情況下,cookie是可以透過javascript來存取的(document.cookie),如同上一篇所說的,有可能會有XSS攻擊的風險。 將cookie設定為HttpOnly,表示這個cookie無法透過js存取,document.cookie裡面就不會顯示出HttpOnly的cookie了。
因此我們在server端設定session的時候,應該要把http only打開。
如下程式碼,設定session沒有打開http only:
javascript透過document.cookie可以拿到session id。
接著我們改一下程式:
可以看到PHPSESSID這個cookie被設定為HttpOnly了,無法再利用document.cookie來取得。
接著我們再改一下程式:
這次多設定myName=Vic的cookie上去,可以發現document.cookie沒有出現PHPSESSID但是有出現myName,因為myName沒有設定為HttpOnly。
接著再改一下程式:
2. 對user輸入內容encode
不論是前端或後端,user輸入的任何內容都是不可信的,必須通過檢查,不過前端是有被竄改code的可能的,因此若前端沒檢查,至少後端一定要檢查。
以php為例,可以使用htmlspecialchars函數來將HTML編碼,這樣就能避免瀏覽器直接執行惡意程式碼,以下直接從程式來看:
這邊修改一下上一篇: Cross-Site Scripting 攻擊的程式碼,在塞入資料庫之前做encode:
其中ENT_QUOTES表示雙引號跟單引號都要轉換! 按下Send送出後,可以看到塞到資料庫的是有經過編碼的,"這些關鍵字都被encode了,最後query出來在瀏覽器看到的是瀏覽器經過decode後的結果,因此就不會被瀏覽器當作是程式碼執行了。
3. 假如是用php的話,關閉phpinfo頁面
phpinfo裡面包含了cookie資訊,如果沒有關閉這個頁面,就會給駭客有機會拿到cookie!
分享至
成為作者繼續創作的動力吧!
小弟是一位軟體工程師,樂於幫助他人,撰寫技術文章除了幫助自己複習以外,也希望可以幫助到他人,若文章內容有誤,還請大大不吝給予指教!
© 2024 vocus All rights reserved.