web安全——應用(java)

来源:http://www.cnblogs.com/ansn001/archive/2016/07/07/5649301.html
-Advertisement-
Play Games

簡介 由於網路技術日趨成熟,黑客們也將註意力從以往對網路伺服器的攻擊逐步轉移到了對web應用的攻擊。據最新調查,信息安全有75%都發生在web應用而非網路層面。 場景 1. 控制訪問的許可權。只讓可以訪問的訪問到最小的資源和許可權。 2. 控制輸入內容。所有輸入都可能是不安全的,所以要過濾。 3. 保證 ...


簡介

由於網路技術日趨成熟,黑客們也將註意力從以往對網路伺服器的攻擊逐步轉移到了對web應用的攻擊。據最新調查,信息安全有75%都發生在web應用而非網路層面。

場景

  1. 控制訪問的許可權。只讓可以訪問的訪問到最小的資源和許可權。
  2. 控制輸入內容。所有輸入都可能是不安全的,所以要過濾。
  3. 保證業務的安全。
  4. 保證數據的安全性。
  5. 控制輸出內容。要過濾輸出的內容,解決瀏覽器安全問題。

解決問題

輸入和輸出的很多問題,都可以通過Aop的思想來統一解決。儘量讓應用的問題都通過架構去實現,以避免因為開發人員因素,而且對正常業務是透明、不可見的。
人為的因素,需要有代碼評審流程,甚至需要安全的軟體構建流程去規避。

應用安全

  1. 千萬不要用root!!!啟動程式。
  2. 運行的用戶不允許對源代碼有修改的許可權。
  3. 需要有新文件生成的目錄(比如文件上傳,動態代理等),不能有執行的許可權。
  4. 不允許用戶訪問目錄。基於tomcat來說,把所有的視圖文件(jsp、ftl等)放到WEB-INF下。webapp下不直接放任何文件。

控制輸入內容

用戶所有的輸入,都可以認為是不安全的。千!萬!不!要!以為用戶的輸入是合法的。要採取防禦式的方式去處理應用。確保應用的安全。一般我們提倡的是:防禦式架構和防禦式編程。

控制http參數

  1. 千萬不要亂用數據類型。使用基本數據類型,少用包裝類。包裝類容易被攻擊。不要用String去接受所有類型數據。原則上:是什麼類型就用什麼類型去接收。
  2. 通過架構設計,添加一層設置處理http參數(驗證數據的類型、合法性、長度和範圍)。一般都是通過aop來實現。比如:對郵件、手機的驗證,對非法數字(小於0)的驗證,對整數最大值的驗證,對字元串最大長度的驗證等。

文件上傳

  1. 控制文件類型,通過尾碼控制。上傳文件的尾碼要使用白名單,不要使用黑名單。只允許我們知道的文件類型上傳。這樣能確保全全性。
  2. 控制文件的大小。文件大小必須控制,否則容易出現系統硬碟資源被吃滿。
  3. 上傳的文件要壓縮。這樣就算裡面有攻擊的代碼也會被破壞掉。
  4. 上傳的文件名要隨機、而且沒有規律。可以考慮uuid。否則容易被猜測,然後把文件拖走。

sql註入

  1. 通過框架的參數化去解決。
  2. 要有嚴格的規範以及日常的代碼評審。人為的因素,往往是很多安全問題的罪魁禍首。
  3. 要嚴格規劃應用對資料庫操作的用戶。只允許有查看和修改數據的許可權。就算是出了安全問題,也能把問題減少到最低,比如:至少避免被攻擊者直接drop database.

html註入

通過架構的方法,凈化。實現思路aop。
在http到執行方法前,把標簽凈化掉。如果確實有需要富文本的地方,一定也要使用白名單的方式,只允許少數合法標簽,其他的也全部凈化。
java有一個開發框架是:Anti-Samy,或者自己通過正則來實現。

數據敏感詞

通過架構的方法,分詞、詞庫去解決。實現思路aop。
可以根據敏感的程式來判斷處理機制。
如果程度一般,則可以通過**來替換。
如果程度太高,涉及黃或者國家安全等,則可以拒絕輸入。

保證業務的安全

每一個業務都要考慮是不安全的。然後都應該有對應的處理機制。

防止暴力破解

暴力破解是一種非常容易被忽視的安全問題。
這種問題的解決思路:

  1. 提升密碼複雜度。太簡單的密碼要拒絕。
  2. 記錄驗證頻率。超過這個頻率就拒絕。

比如:登錄,簡訊驗證碼,支付密碼等用戶核心安全業務。

不安全的直接對象引用

不安全的直接對象引用 ,即訪問不屬於自己的業務。
在業務設計的時候要明確哪些是允許其他用戶訪問的,其他的都不允許訪問。還是根據最小原則來處理。
比如:不訪問訪問別人的訂單信息。

不要信任用戶輸入的數據

重要的信息,千萬不能通過讓用戶傳輸過來。千萬不能自認為這些用戶不會輸入啊,都是我們設置好的。
比如:訂單的金額,是否有操作的許可權等。

嚴格的許可權控制

  1. 水平許可權控制。用戶是否有操作業務的操作。比如,用戶對應的角色和身份不允許訪問指定的業務。
  2. 垂直許可權控制。用戶是否按指定的業務流程操作。比如,在一些流程過程中需要先有合同才能進貨,在一些流程中需要先填寫個人信息才能使用後面的功能。

保證數據的安全

互聯網的時代,數據也是極為重要的資源。

不可以預見性

對於重要資源,要隨機性,要不然容易被測試到規則,全部拖走。
比如用戶外頁信息 /home/x.html。這裡的x用的是數字。

控制資源訪問的頻率

比如,只允許同一個ip訪問100次每天。這個規則,可以根據產品或者運營來共同制定。實現思路:通過aop

記錄數據操作記錄

重要的信息操作的時候,要有記錄。實現思路:通過aop。

控制輸出內容

輸出的內容確保是乾凈的,對用戶不會有危險的。同時也不會泄露伺服器的信息。

過濾敏感信息

  1. 把代碼的註釋去除。通過aop實現。
  2. 拒絕伺服器相關的信息,比如ip。這個需要在代碼評審的時候核實。不能有任何硬編碼泄露伺服器信息的地方。
  3. 異常不要說的太明確。每個異常都是要處理的。如果不清楚的異常,提示模糊信息即可,然後把明確的信息記錄到日誌。 通過aop實現

驗證方法

  1. 通過ibm appscan工具驗證。能解決常見的安全問題
  2. 目錄遍歷。御劍。
  3. web後臺暴力破解。httprint。

更牛B的解決方案

雲WAF發展的新道路。感興趣的看參考資料。感覺棒棒噠,果斷還是驗證了那句經典的話重覆就會被解決

參考資料

  1. Web應用安全——攻防對抗發展趨勢
  2. Web應用安全
  3. web應用系統安全開發規範
  4. 常見web應用安全問題

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.包 package pack; /*定義包,放在程式的第一行,包名所以字母小寫*/class PackageDemo{ public static void main(String[] args) { packa.DemoA a=new packa.DemoA(); /*編譯時將會出現兩個錯誤, ...
  • 以上代碼中,s1和s2引用的是相同的地址,故而第四行列印出的結果是true;而s3雖然只與s1,s2相等,但是s3時通過new String("123")創建的,重新開闢了記憶體空間,因引用的地址不同,所以第5行列印出false;intern方法返回的是String對象在常亮池中的引用,所以最後一行打 ...
  • Netty作為非同步的、事件驅動一個網路通信框架,使用它可以幫助我們快速開發高性能高可靠性的網路服務。 為了更好的使用Netty來解決開發中的問題,學習Netty是很有必要的。 Netty現在主流有三個版本:Netty3、Netty4、Netty5。這三個版本中,變化最大的要數線程模型了,各版本的線程 ...
  • 第一步 下載nodejs 訪問https://nodejs.org/en/download/url 根據您的系統是32位或64位,按照文字說明進行下載 第二步 安裝nodejs 雙擊運行nodejs的安裝包,並指定到一個nodejs目錄 第三步 調試nodejs安裝是否成功 我們在任何目錄新建一個h ...
  • 1.意圖 給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 2.動機 如果一種特定類型的問題發生的頻率足夠高,那麼可能就值的將該問題的各個實例表述為一個簡單語言中的句子。這樣就可以構建一個解釋器,該解釋器通過解釋這些句子來解決該問題。 3.適用性 當一 ...
  • 問題: Character是角色類,是抽象類,由具體的角色來繼承,Weapon是武器介面,有具體的武器來實現。任何角色想換武器可以有setWeapon方法來實現,在角色fight過程中使用武器的useWeapon方法,進行攻擊。 UML: 策略模式: 定義了演算法族,分別封裝起來,讓他們之間可以互相替 ...
  • 說明 寫這個目錄是為了方便閱讀。也是為了記錄統一的問題。 這個系列,並不一定是全的,也不一定是對的,所以請大家多做過濾。 這裡面場景比較多的是本人在實踐中遇到的問題,然後自己思考抽象的。 目錄 1. "web安全——簡介" 2. "web安全——防火牆" 3. "web安全——系統(Linux)" ...
  • 簡介 數據安全是現在互聯網安全非常重要一個環節。而且一旦數據出現問題是不可逆的,甚至是災難性的。 有一些防護措施應該在前面幾個博文說過了,就不再贅述。比如通過防火牆控制,通過系統的用戶控制,通過web應用的控制等。 想說的是,任何一個節點都不是單獨存在的。 場景 1. 確保應用本身安全。 2. 控制 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...