什麼是跨站腳本攻擊(Cross-Site Scripting, XSS)?
跨站腳本攻擊(Cross-Site Scripting, XSS),也有人稱Non-Persistent XSS 或 Type-I XSS, 如果你的網頁程式沒做好XSS的防範, 即可能造成XSS攻擊, 右邊影片即為XSS的示意動畫, 動畫中假設Web Server有一個Hello world的程式,在正常的狀況,使用者輸名字後,程式會將輸入的名字傳到後端, 後端程式再把Hello和你的名字直接傳回前端, 所以前端會顯示hello加上你的名字; 以影片為例子, 駭客可能寄給你一個連結, 連結上利用了這個有XSS弱點的程式, 駭客把你的名字欄位直接填入可攻擊你系統的Script, 使用者點了這個連結, Browser即執行 了Post, 把這駭客給的Script當成你的名字送到後端, 因為你的程式沒有檢查或過濾使用者Post過來的名字就直接傳回前端, 因而造成前端直接執行這個Script,這就是 XSS攻擊的手法。
駭客如何透過跨站腳本攻擊(Cross-Site Scripting, XSS)入侵你的系統 ?
右邊Youtube影片介紹什麼是反射式跨站腳本攻擊, 這支影片程式是使用C#來做介紹, 影片中只會介紹程式為什會造成XSS, 我們不介紹萬用解法也不建議使用, 因為那並不安全, 我們使用最簡單的hello world程式來介紹什麼是Refelected XSS, 也讓大家了解駭客怎麼使用XSS來發動攻擊 。
XSS 可能造成的衝擊
有很多人問我XSS能做什麼攻擊? 每次看到網路上的範例都只有出現Alert Dialog就是造成XSS, 但是實際上會造成什麼問題確很少人提到, 查了很多文章後, 每個人寫的又不太一樣, 大致上就是session hijacking, 改變網頁內容, 取得機敏性資料和提升權限等等.. 但是實際上XSS可以做各式和樣的攻擊, 右邊的 Youtube影片可以讓大家了解駭客可以利用各種工具來入侵你的系統, 影片利用很簡單及立即可取得結果的功能來Demo, 告訴你XSS所造成什麼樣的後果。
Reflected XSS 處理方式
很多網站及顧問告訴你防範XSS方式就是使用HTML encode, 確實HTML encode可以減輕XSS的攻擊, 但是HTML encode並無法完全解決XSS, 這也是為什麼 大家使用源始碼掃描程式在掃描時有時候會過, 但是過一陣子又被掃出來了, 這並不一定是源始碼掃描程式誤判, 有時候確實是因為你使用的Library 已經被破解了, 例如Microsoft Anti-XSS Library,AntiXssEncoder..等等, 例如apache的StringEscapeUtils 也有commons.lang, commons.lang3, commons.text..等等, 而OWASP的ESAPI也修改了很多版本, 很多人因為之前源始碼掃描程式告訴你, XSS已經解決了, 之後又被掃出來了之後, 就覺得他是誤判, 也沒發現是library被破解了, 於是把他使用filter過濾掉後, 於是你們的程式的XSS永遠都不會解決,這就是我現在都不願意告証客戶使用HTML encode來解決XSS的原因; 而要怎麼解決XSS這個弱點呢? 我的建議是使用白名單的方式來驗證User所輸入的資料, 不同的資料要使用不同的方式來做驗證, 而程式是你們自己寫的, 只有你們自己最清楚該怎麼驗證資料, 若不清楚要怎麼做驗證, 請與你的資安顧問討論, 他們會告訴你最佳的解決方法, 網路上的解決方法, 他們不會 為你負責任; 也不要為了省小錢而造成你們的系統被駭客入侵, 那就得不償失了。