iT邦幫忙

1

關於XSS這件事,是不是一門很深的學問???

  • 分享至 

  • xImage

最近無聊做了個網站,就是純html+js,沒有後端、資料庫。
大概就是放了個input給使用者輸入東西,然後我ajax讓它render到網頁上再加上前後一些文字而已。
丟給朋友玩,隔了幾天他興沖沖的密我說他發現漏洞了。

「欸欸欸我抓到你漏洞了!你的網站可以XSS!」

「喔是喔,哪裡?」我不以為然,剛好手邊也沒事情在吃東西追劇,就叫他打視訊。

眼見他在我的input裏面輸入<script>alert(1)</script>很激動很興奮的告訴我,點下去就攻擊成功了,我就是靜靜的看。
嗯,彈窗是顯示成功了,不過我什麼話都沒說。
「你看這被我XSS打穿了!」人家倒是繼續還在爽,我才跟他說:

「那個,你看看url,有變化嗎?」 問完我自己接著說,「沒有」,然後我就說你要不要重新整理網頁看我有沒有動態的把你丟的script拿到後端去render?
他好像聽傻了,手開始操作後才尷尬的說:欸..好像、那個、這,但...

「反正你的網站能被我彈窗就是被XSS啦...!」
他有點難下台的補充一句,我只好點點頭,苦笑說謝謝你的發現。

我心裡只想,笑死了,要這樣玩?
那我開F12每個網站豈不是被我彈窗彈爆。
於是我就繼續吃我的飯,心中開始整理是不是可以寫一篇關於XSS與靜態網站的文章。

好像不少人以為跳出視窗就是中了,開devtool在那邊改也以為破解FB、google....
要知道我是用ajax,而且資料沒丟後端,他的script是不可能重現的...
人家反射型或是DOM XSS都要弄一個涵蓋腳本的URL,才能完成,

如果像他講的要我在ajax後還要過濾字符,但我根本不會動態添加到網站,那只限使用者自己打input的,還要多去弄這段code,
豈不是杞人憂天....

XSS是不是一門滿深的學問,似乎要花很大心力才能理解他,否則好像很容易搞錯、沒搞懂?
各位前輩應該都有處理過相關的問題,可以分享一些經驗談!
以上愚昧無知,討論交流~

看更多先前的討論...收起先前的討論...
黃彥儒 iT邦高手 1 級 ‧ 2023-01-29 00:02:11 檢舉
大概就是A做的事情可以害到B,或是未來的A,才是XSS成功吧…
瀏覽器client上怎麼被修改都沒差,而且這很老的資安問題了,像是字串送到server變程式碼被執行的形況,現在前後端框架基本上都有擋了
如果有比較注重資安問題的話,前端比較常遇到的應該是Cookie的防護
https://ithelp.ithome.com.tw/articles/10218811
akajoke iT邦新手 5 級 ‧ 2023-01-29 00:52:12 檢舉
謝謝兩位的分享,都滿有趣的,我再去深入研究。
bill0704 iT邦新手 5 級 ‧ 2023-01-29 08:55:22 檢舉
我倒覺得你這朋友蠻棒的。至少他發現疑似漏洞(不管大小)是直接跟開發者說,不是跑去跟你的同事或是其他人亂說,害他人誤會或質疑你的能力。在這險惡的社會上,這個朋友值得深交。
bill0704 iT邦新手 5 級 ‧ 2023-01-29 09:10:03 檢舉
而且從"有心"的滲透者的立場去思考,他當然是先發現漏洞以後再往下挖,等你網站更新或接後端後再試試SQL語法看能不能刪除你的資料庫。能先跟你通知真的是好朋友。這在Google或FB是要寫感謝函甚至發錢的。認真建議你請朋友一杯飲料
akajoke iT邦新手 5 級 ‧ 2023-01-29 21:10:57 檢舉
@bill0704 很不錯的角度,謝謝建議~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2023-01-29 08:24:52
最佳解答

說真的,我知道你想說這沒什麼,為何大驚小怪。

或許你說的沒錯。
但我還是要跟你說,你朋友並沒有說錯。

而且你的認為及認知還有觀念才是錯的。

平常在開發程式。就得將這些小細節給注意。
而最好不要有這只是小東西。不該大驚小怪的心態。

XSS最基本的概念。就是「使用者可以輸入任何JS語言」。
這無關你的輸入值是否可以被送去後端。資料是否可以被傳送。

至於你說的SPA這其實又跟XSS並無直接關係。
我明白你覺得都是用AJAX來處理資料及頁面。並不影響。
這你並沒有說錯。但也與XSS無關。

就如我說的,XSS是單純針對JS。它是一個漏洞。
你要不要改當然是隨你的意思就是了。
但它是一個漏洞的本質還是不變。所以你朋友對你說的也是對的。
這不管你後面說的啥SPA、還是後台有做資料處理過等等都無關。
它就是一個漏洞。無論是否有影響到任何事。

不知道這樣說明你可以明白嘛?

akajoke iT邦新手 5 級 ‧ 2023-01-29 21:14:03 檢舉

@㊣浩瀚星空㊣ 您真能理解我的想法,您用簡單的文字跟我溝通,我著實有理解到您想表達的深意,有理解,謝謝您的解說。

akajoke iT邦新手 5 級 ‧ 2023-02-03 21:21:58 檢舉

各位的答案都很棒,最後決定選大師為最佳解答,很謝謝大家都來捧場、分享、討論。
在下學到非常多,非常受用,這篇文章留給其他人參考~~

0
whitefloor
iT邦研究生 2 級 ‧ 2023-01-28 23:06:03

XSS只是基本防禦
基本上都有package幫你處理好了

今天你的網站很簡單,自已玩玩的話也沒問題

不過要是實際在工作
哪天開始東西變多變重要,忽略這件事
到時候這種地雷爆炸就直接讓你加班加到爽,飛在天空到離職都下不來

akajoke iT邦新手 5 級 ‧ 2023-01-29 00:51:24 檢舉

搞錯工作場合跟私底下,本來就是大錯特錯。
跟這個技術應該無關。你說的這種人本來就是什麼都錯。

不懂的人當然會搞不清楚,但我的操作前提是我已經知道這個技術跟概念。

照您說的,朋友間喜歡講黃色笑話的到公司演講也開黃腔,那被電飛不是廢話嗎...搞清楚私下跟公事是基本abc。

whitefloor iT邦研究生 2 級 ‧ 2023-01-29 01:10:40 檢舉

那照你這樣講你的網站就是有XSS的問題,又不想改
又覺得自己寫個半成品沒有發生問題,
朋友講了問題,你也不想聽
po上來又說你懂了,那我也是不懂到底有什麼問題?

1
bizpro
iT邦大師 1 級 ‧ 2023-01-28 23:06:54

「反正你的網站能被我彈窗就是被XSS啦...!

這是XSS的基礎驗證, 您的朋友說的沒有錯, 而您應該檢查您的程式碼, 必須要在Server端清理過濾所有傳來的INPUT值, 和在前端清理與過濾殘留的INPUT值.

您可以參考我和ChatGPT討論的結果:
我問:
If the alert(1) attempt works, it means that the server doesn't sanitize the input value . Nor does the frontend clean up the input value. The browser then fires up the alert. Is this correct?

ChatGPT回覆:
Yes, that is correct. If an attacker is able to successfully execute a alert(1) attempt by inputting it into an input field, it likely means that the server-side code does not properly validate and sanitize user input, and the front-end does not clean up the input value before displaying it to the user. This allows the attacker to inject malicious code into the web page, which is then executed by the browser.

This is one of the examples of a Cross-Site Scripting (XSS) attack, which occurs when an attacker is able to inject malicious code into a web page viewed by other users. This can allow the attacker to steal sensitive information, such as cookies or login credentials, or to perform other malicious actions on behalf of the victim.

It is important to always validate and sanitize user input on the server-side, and to clean up any user input that is displayed on the front-end to prevent XSS attacks.

看更多先前的回應...收起先前的回應...
akajoke iT邦新手 5 級 ‧ 2023-01-29 00:47:20 檢舉

很不錯的討論,但請要注意,有種東西叫做SPA。

single-page application,是一種網路應用程式或網站的模型,它透過動態重寫當前頁面來與使用者互動,而非傳統的從伺服器重新載入整個新頁面。

你忽略了這個東西,以傳統的模式去設想是「 the server doesn't sanitize」。Why should I?

There is no server in the first place at all.

The whole website page is only presented by the front-end that no one could change anything by just putting values in a Html tag.

不知道這樣解釋有沒有幫助你理解,這不存在所謂伺服器端的驗證問題。
這是最大的重點跟前提。

小哈片刻 iT邦研究生 5 級 ‧ 2023-01-29 02:05:33 檢舉

前端要搞怪的話,那麼怎麼防都防不住的!
耗費一堆心力,大概也只能得到一天的暫時防護,有心人花點時間和腦力就可以輕易破解(過來人的眼淚)

所以前端只要搞好使用者經驗,要搞防護請花時間在後端~

bizpro iT邦大師 1 級 ‧ 2023-01-29 11:03:56 檢舉

single-page application,是一種網路應用程式或網站的模型,它透過動態重寫當前頁面來與使用者互動,而非傳統的從伺服器重新載入整個新頁面。

自有網站開始的那一天, 網頁就是SPA. 隨著網站系統與網站語言的發展, 演進各種不同的網站框架, 在網站框架下, 網頁分工化成不同的頁面, 也就是Multiple-Page Application, MPA, 近好幾年來, 新的網站框架如Node.js等的出現, 開始有了SPA的說法. 其實是因為依附在HTTP/HTTPS協定下的Web Services技術的成熟與發展, 分離了可以在瀏覽器上運行的網頁, 給了個最古老的SPA的名稱, 舊瓶裝新酒, 如此而已.
基於資安理由, 也就是防範XSS, 現代的瀏覽器預設只處理透過HTTP和HTTPS協定載入的Javascript指令或檔案, 意思是, 不論SPA或MPA, 都需要網站伺服器來提供HTTP/HTTPS服務, 如果您用file://協定來開啟本地端的SPA, 瀏覽器預設不會處理這樣的Javascript指令或檔案的. 至於您說的傳統的從伺服器重新載入整個新頁面, 這和SPA與MPA無關, 而是XMLHttpRequest()和DOM的交互作用, 如何渲染是瀏覽器的責任, 任何形式的網站都可以只渲染部份的DOM, 不論是SPA或MPA.

對XMLHttpRequest()陌生的人, 這其實是jQuery封裝XMLHttpRequest()成AJAX的底層, 我不用jQuery, 也奉勸不要使用jQuery了.

The whole website page is only presented by the front-end that no one could change anything by just putting values in a Html tag.

您說「整個頁面都跑在前端而沒有任何人可以僅僅輸入值到HTML標籤就可以改變任何事?」,您要表達的是能夠輸入<script>alert(1);</script>到input中沒有什麼關係? 當然輸入本身沒有關係, 而您應該對瀏覽器如何處理Javascript有誤解.瀏覽器會處理這個javasctipt指令就表示有Event著實被觸發(triggered, fired up), 不論是本地端或伺服器端, 代表就是XSS-vulnerable.

不知道這樣解釋有沒有幫助你理解,這不存在所謂伺服器端的驗證問題。

伺服器對往返資料「一定」要進行伺服器端的驗證(validation)和清理(sanitization), 如果沒有進行驗證與清理的處理, 就是XSS-vulnerable, 請不要上線. 而且建議在前端也要處理, 以減少不必要的伺服器資源. 很可惜, 很大部分的教學都只提資料驗證, 忽略掉資料清理.

akajoke iT邦新手 5 級 ‧ 2023-01-29 21:12:51 檢舉

謝謝您的分析,我會重新用新角度理解,學習了。

0
phonehouse
iT邦見習生 ‧ 2023-01-29 12:04:28

「欸欸欸我抓到你漏洞了!你的網站可以XSS!」
「喔是喔,哪裡?」我不以為然

「反正你的網站能被我彈窗就是被XSS啦...!」

「很激動很興奮的告訴我,點下去就攻擊成功了,我就是靜靜的看。」

你跟你朋友是否知道XSS跟XSS attack的分別?
你們一時在討論XSS, 一時又在討論XSS attack
你的網站存在XSS漏洞, 只是你朋友誤說成有XSS attack漏洞
你不把XSS當一回事, 基於不存在XSS attack漏洞, 而不是沒有XSS漏洞, 這裡能否區分清楚?

akajoke iT邦新手 5 級 ‧ 2023-01-29 21:14:29 檢舉

您提出的兩個關鍵字很棒,理解之間的區別了,謝謝您。

我要發表回答

立即登入回答