防禦XSS攻擊

更新於 發佈於 閱讀時間約 3 分鐘
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!
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
21會員
161內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
Cross-Site Scripting簡稱XSS,它指的是駭客在網頁裡插入惡意程式碼,當其他user瀏覽該網頁時,惡意網頁程式碼就會被執行。
Connection Pool中文為連線池,是位於DB前面的緩衝區。 假如我們只是要一個簡單的query功能,下了一個簡單的查詢SQL,可是卻花了很多時間執行,而且每次都要花這麼多時間,這樣豈不是很浪費嗎? 然而,花時間的地方可能不是你SQL效能的問題,而是你沒使用connection pool。
以瀏覽www.google.com為例,瀏覽器需先找到www.google.com對應的ip地址,才能得到網頁資料,顯示在瀏覽器中。 那要如何才能找到ip呢? 這邊就要提到DNS(Domain Name System),他是一個資料庫,裡面紀錄了域名跟IP的對應,瀏覽器透過DNS可以找到IP。
結構化資料: 事先定義好每個欄位可以存放什麼資料,這種儲存的資料就是結構化資料。 像是關聯式資料庫中的資料,需要先把table欄位定義好,之後才能儲存資料。 半結構化資料: 無需事先定義好資料欄位,每一筆資料能夠根據需求儲存不同的欄位,因此很有彈性,如JSON, XML等等。 非結構化資料: 未整理
OAuth 2.0 是一個開放標準,允許user授權第三方應用存取該user的私有資料,而無需提供帳密資料給第三方應用。
想從javascript拿到不同源的資料,除了上一篇介紹的CORS,其實還有一個東西叫JSOP,是指透過script tag src的方式繞過同源政策來實現cross origin。
Cross-Site Scripting簡稱XSS,它指的是駭客在網頁裡插入惡意程式碼,當其他user瀏覽該網頁時,惡意網頁程式碼就會被執行。
Connection Pool中文為連線池,是位於DB前面的緩衝區。 假如我們只是要一個簡單的query功能,下了一個簡單的查詢SQL,可是卻花了很多時間執行,而且每次都要花這麼多時間,這樣豈不是很浪費嗎? 然而,花時間的地方可能不是你SQL效能的問題,而是你沒使用connection pool。
以瀏覽www.google.com為例,瀏覽器需先找到www.google.com對應的ip地址,才能得到網頁資料,顯示在瀏覽器中。 那要如何才能找到ip呢? 這邊就要提到DNS(Domain Name System),他是一個資料庫,裡面紀錄了域名跟IP的對應,瀏覽器透過DNS可以找到IP。
結構化資料: 事先定義好每個欄位可以存放什麼資料,這種儲存的資料就是結構化資料。 像是關聯式資料庫中的資料,需要先把table欄位定義好,之後才能儲存資料。 半結構化資料: 無需事先定義好資料欄位,每一筆資料能夠根據需求儲存不同的欄位,因此很有彈性,如JSON, XML等等。 非結構化資料: 未整理
OAuth 2.0 是一個開放標準,允許user授權第三方應用存取該user的私有資料,而無需提供帳密資料給第三方應用。
想從javascript拿到不同源的資料,除了上一篇介紹的CORS,其實還有一個東西叫JSOP,是指透過script tag src的方式繞過同源政策來實現cross origin。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
今天寫文章來學習什麼是「第一方 Cookies」。 ## 1. Cookie在LinkedIn廣告中的角色 根據Linkedin的文章[1], Cookie 是被設置在網站訪問者的 Web瀏覽器上, 可以幫助 Linkedin 確定廣告被展示給哪些成員, 是衡量廣告效果,改
(1) 收集用戶名單,例如 Email 和手機,未來可做廣告受眾再行銷,例如 FB 廣告、GDN 廣告、Email發送。 (2) 在網站追蹤中,用 GTM 實施「增強型轉換」,讓每一個轉換數據發送時都帶有第一方數據,能讓轉換追蹤更精準,減少受 Cookie 政策的影響。 (3)
在今天的數字世界中,網站安全性是極為重要的議題。隨著越來越多的網站選擇採用HTTPS協議加密數據傳輸,但這並不意味著它是絕對安全的。事實上,HTTPS本身也存在著一些安全隱患,這些隱患可能會影響網站的安全性和用戶的數據隱私。 1. SSL/TLS 憑證漏洞 HTTPS的加密基於SSL/TLS
Thumbnail
戴夫寇爾研究團隊發現PHP在Windows系統上存在遠端程式碼執行漏洞,影響多個PHP版本,包括XAMPP預設安裝環境。漏洞源於字元編碼轉換的問題,允許攻擊者在遠端伺服器上執行任意程式碼。建議使用者立即升級至最新PHP版本,或採取臨時緩解措施。
Thumbnail
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
前言 這篇文章分享cookie、sessionStorage、localStorage、session的差異,因為前後端溝通常用的就這幾個,我比較常用的是cookie或session,但也是有可能會用到sessionStorage或localStorage的時候,因此想說這邊做個紀錄比較他們的差別
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
發送表單用get跟post看起來好像都無所謂,然而事實並非如此,使用GET的風險如下: 安全性問題 機密資訊為何不宜用GET,是因為由GET方法提交的表單會將欄位的key,value顯示於URL上,想像一下如果小明借用你的電腦,查看你的網頁歷史紀錄時就可以看到你的帳密了,多可怕! 再來就是如果
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
今天寫文章來學習什麼是「第一方 Cookies」。 ## 1. Cookie在LinkedIn廣告中的角色 根據Linkedin的文章[1], Cookie 是被設置在網站訪問者的 Web瀏覽器上, 可以幫助 Linkedin 確定廣告被展示給哪些成員, 是衡量廣告效果,改
(1) 收集用戶名單,例如 Email 和手機,未來可做廣告受眾再行銷,例如 FB 廣告、GDN 廣告、Email發送。 (2) 在網站追蹤中,用 GTM 實施「增強型轉換」,讓每一個轉換數據發送時都帶有第一方數據,能讓轉換追蹤更精準,減少受 Cookie 政策的影響。 (3)
在今天的數字世界中,網站安全性是極為重要的議題。隨著越來越多的網站選擇採用HTTPS協議加密數據傳輸,但這並不意味著它是絕對安全的。事實上,HTTPS本身也存在著一些安全隱患,這些隱患可能會影響網站的安全性和用戶的數據隱私。 1. SSL/TLS 憑證漏洞 HTTPS的加密基於SSL/TLS
Thumbnail
戴夫寇爾研究團隊發現PHP在Windows系統上存在遠端程式碼執行漏洞,影響多個PHP版本,包括XAMPP預設安裝環境。漏洞源於字元編碼轉換的問題,允許攻擊者在遠端伺服器上執行任意程式碼。建議使用者立即升級至最新PHP版本,或採取臨時緩解措施。
Thumbnail
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
前言 這篇文章分享cookie、sessionStorage、localStorage、session的差異,因為前後端溝通常用的就這幾個,我比較常用的是cookie或session,但也是有可能會用到sessionStorage或localStorage的時候,因此想說這邊做個紀錄比較他們的差別
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
發送表單用get跟post看起來好像都無所謂,然而事實並非如此,使用GET的風險如下: 安全性問題 機密資訊為何不宜用GET,是因為由GET方法提交的表單會將欄位的key,value顯示於URL上,想像一下如果小明借用你的電腦,查看你的網頁歷史紀錄時就可以看到你的帳密了,多可怕! 再來就是如果