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
更多相關文章
  • 後續補充更新 ...
  • 這篇文章是關於Java static關鍵字的使用,主要會介紹以下的內容: 1. static 的概念 2. static的各種應用 3. 總結 static 是什麼 static 顧名思義是靜態的意思。與this相對,static表示所修飾的部分是屬於類本身所有的,不依賴與某個具體的實例。 而thi ...
  • /*************以下源碼通過測試******************************/ package cn.jason.ios.images; import java.awt.FileDialog;import java.awt.Image;import java.io.Fil ...
  • Java最早的名稱叫"oak"後來改名叫"Java". Java最早是屬於"Sun"公司的, 後來被"Oracle"公司收購. 最原始的"oak"是為電視/烤箱/家用電子產品做互動式開發(互動式開發可以理解為"互動式操作", "互動式操作"類似於 現在的"智能家居")的. Java各版本: Java ...
  • 以前在單項目中用過RabbitMQ,沒有問題 不過這次在分散式項目中使用RabbitMQ中有點搞糊塗了,但是實際上是沒有問題的,思路清晰就行 簡單看一下實際操作的示例吧: 資源文件中需要配置基本的rabbitMQ的屬性,如下: 然後要配置applicationContext-rabbitmq.xml ...
  • 一、通用標簽 1.s:property (讀取值棧中對象的屬性值) 屬性:value:指定OGNL表達式;default:OGNL表達式返回為 null 時,使用預設值;escape:是否對 HTML 特殊字元進行轉義 e1:讀取對象棧中對象的屬性值 e2:訪問Map棧,讀取Session域中對象的 ...
  • 代碼一大串! ...
  • 一.設計背景 現實生活中,我們要做一件事情或者完成某項工作,往往有很多種途徑。比如我們出游,可以選擇坐汽車,坐火車,土豪點的選擇是坐飛機。還有我們現線上下的支付方式也有了很多種選擇,以前在外面忘了帶錢的話可能一瓶水都難以買到,現在只要我們手機在身上,可以用微信或者支付寶。 在軟體設計層面,我們把各種 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...