使用JS檢測,你的Web系統真的安全嗎?
相關學習推薦:javascript
你的Web系統真的安全嗎?
千里之堤,潰於蟻穴。
在Web系統中,一個小小的漏洞,往往能引發極為嚴重的後果。因此,Web安全性是每個系統在設計、開發、維運時必須要重點考慮的問題。
現今許多Web系統所採取的防禦措施是偏向基礎和簡單的,往往只針對常見的安全漏洞做了防禦,例如:
- Csrf
- XSS
- Sql注入
#等等。這些基礎的防禦措施是必須要做的,且實施的成本不高,但它們只是系統安全防禦中的基礎部分。很多開發人員在意識中認為做好這些就足夠應付大部分情況了,這種想法是非常危險的。實際上,除了這些基礎且標準化的漏洞,每個業務系統本身的業務邏輯也很有可能成為駭客攻擊的目標,一旦被抓到並攻破,後果將是非常嚴重的。以下將列舉一些常見的商業邏輯漏洞,這些漏洞也是先前開發系統時踩過的坑,希望能對大家有所啟發。
會話憑證管理混亂
我們都知道HTTP本身是無狀態的,為了能讓瀏覽器和伺服器互相知道身份並信任對方,大部分web系統都是利用“token”這種約定的憑證來實現的,token會在使用者登入之後產生,並在使用者主動登出或超過一段時間後失效。也就是說,請求帶了對應的token,那麼服務端就能拿到token做相應的校驗,校驗通過則信任該請求並執行相關業務邏輯,如果沒帶、帶一個非法的或者過期的則認為不合法。這看起來並沒有什麼問,但實際的實作上可能暗藏漏洞。
來看兩個例子:
1.前端開發人員小明在寫使用者點選退出按鈕的邏輯時,只是單純的清空了cookie或localstorage中的token值(token一般存這兩個地方),並沒有向後台發起請求讓token在業務中過期失效。那這個token的有效性本質上違背了使用者的意圖,此時就存在非常大的風險。當用戶自發性退出後,token仍然有效,假如該token被他人透過某種方式獲取並記錄下來,那他可以完美的回放用戶執行過的操作,比如更改用戶信息,下單等。
2.在上面的例子中,我們有提到token是要設定過期的,合理的過期時間能有效降低風險。但後台開發小哥也許在設定token過期的配置中,眼花加手抖,多打一位數,或者把單位理解錯,在S級單位上用了MS級的數值,那過期時間就會被設定的很長。對於登入之後就不喜歡主動登出或長期掛著頁面的使用者就非常的危險。 token在用戶長期不使用的情況下依然有效,如果被他人拿到token,也能幹很多的壞事。
校驗失效
檔案上傳應該是Web應用程式上比較常用的功能,例如上傳頭像,上傳檔案到網盤等等。惡意使用者可能會在上傳的時候,上傳木馬、病毒、惡意腳本等文件,這類文件在伺服器上被執行會帶來較嚴重的後果。這種攻擊方式成本較低,比較容易被攻擊者利用。允許上傳的檔案類型越多,受攻擊的可能性就越大。當惡意程式被成功上傳後,可能會被使用者下載,在使用者電腦上執行後使之中毒。也可能在伺服器上就執行惡意程序,造成伺服器被控制,進而伺服器癱瘓,資料遺失。
正常情況下,程式都會對檔案類型進行判斷,只允許我們認為合法的檔案上傳到伺服器。但是,這個判斷在某些web程式中,只在前端做了,後端沒做。這就為攻擊者帶來了機會,攻擊者可以輕鬆的串改請求,從而實現非法檔案的上傳。
正確的做法應該是後端進行檔案副檔名判斷、MIME偵測以及限制上傳檔案大小等限制來防禦。另外,可以將檔案保存在一個與業務隔離的伺服器來防止惡意檔案攻擊業務伺服器導致服務不可用。
資料枚舉
在登入系統,大部分系統會在使用者登入的時候判斷使用者是否存在,然後給予提示「該手機號碼未註冊」。如果這個邏輯是用一個單獨的介面做的,那麼就會存在被暴力列舉的風險。攻擊者可以透過該介面利用手機號碼庫進行請求枚舉,識別出哪些手機號碼是在系統中註冊過的,為下一步暴力破解密碼帶來機會。
對於這個問題,建議是將該判斷放到登入驗證的介面中,並不會回傳明確的提示。你會看到做的好的網站上,通常會提示「該手機號碼未註冊或密碼錯誤」。雖然這在用戶體驗上打了折扣,但也更加的安全。
資料寫入重播
以一個論壇的發文舉例,利用抓包工具抓取論壇發文的請求過程,並透過該工具重播過程,會發現貼文清單出現了兩條一樣的帖子,這就是被重播攻擊了。如果加快重播頻率,不僅會在系統中產生大量的垃圾數據,還會因為頻繁寫入而給業務資料庫帶來巨大壓力。
對於此類有重播風險的請求,建議加上請求頻率限制。例如,可以判斷兩個請求的時間戳,設定大於某個時間值才有效。
權限漏洞
權限校驗是Web系統的基本功能,例如一個公司組織架構管理系統,裡面提供了修改部門名稱、部門經理的功能。加上權限校驗能很好地避免任意使用者能透過這些功能修改他本無權限的資訊。這類系統中一定會實現權限校驗,但實際上真的實現對了嗎?
假設我們規定,系統中某使用者需要同時滿足具有超管權限且屬於A部門兩個條件,才能修改部門名稱。往往在實際的程式碼實作中,開發人員只是去判斷該使用者是否為超管,而沒有判斷該使用者是否屬於該部門。在這種情況下,我們可以用B部門的超管帳號,去修改A部門的名稱,相當於越權修改了,這顯然不是我們所期望的結果。即使B部門的超管使用者在介面上找不到修改A部門部門名稱的入口,也可以透過抓取請求修改參數來實現。
除了越權修改,當然還能越權查看。我們一定也不期望A部門的超管能看到B部門的部門訊息,是不是?
建議大家的系統要對使用者存取角色的權限進行嚴格的檢查及限制。
安全無小事,如同一開始所講,任何一個漏洞都有可能帶來毀滅性的打擊,希望大家能重視。不僅在業務設計上要重視,同時也要在程式碼審查上要重視,以避免因實作而帶來的低階漏洞問題。
以上只是舉了眾多安全漏洞中的一小部分,更多嚴重的Web應用程式安全風險可以查閱 OWASP Top 10 2017 發布的Top10安全問題。 www.owasp.org.cn/owasp-proje…
以上是使用JS檢測,你的Web系統真的安全嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。
