軟體工程師應該關注的web攻擊手段
1.SQL注入------常見的安全性問題。
解決方案:前端頁面需要校驗使用者的輸入資料(限制使用者輸入的型別、範圍、格式、長度),不能只靠後端去校驗使用者資料。一來可以提高後端處理的效率,二來可以提高後端資料的安全。
後端不要動態sql語句,使用儲存過程查詢語句。限制使用者訪問資料庫許可權。後端接受前端的資料時要過濾一些特殊字元(如:“--”等字元)
後端如果出現異常的話,要使用自定義錯誤頁,防止使用者通過伺服器預設的錯誤頁面找到伺服器漏洞。
java版
安全查詢(引數化查詢)
//獲取引數,拆分引數
String custname = request.getParameter("customerName"); String query= "SELECT account_balance FROM user_data WHERE user_name = ? ";
//建立連線 PreparedStatement pstmt = connection.prepareStatement( query );
//將引數格式化 pstmt.setString( 1, custname);
//獲取查詢結果 ResultSet results = pstmt.executeQuery();
安全查詢(儲存過程)
//獲取引數
String custname = request.getParameter("customerName");
try {//呼叫資料庫的儲存過程 CallableStatement cs = connection.prepareCall("{call sp_getAccountBalance(?)}"); //將引數格式化
cs.setString(1, custname);
//獲取查詢結果 ResultSet results = cs.executeQuery(); } catch (SQLException se) { }
不安全查詢
String query = "SELECT account_balance FROM user_data WHERE user_name = " + request.getParameter("customerName"); //動態查詢,直接拼接字串try {
//建立連線 Statement statement = connection.createStatement();
//獲取查詢結果 ResultSet results = statement.executeQuery( query ); }
PS:大多數的網站都是使用預設的錯誤頁面。(不要這樣做,容易暴露站點資訊)
2.XSS攻擊------相對複雜的安全性問題
攻擊方式:基於DOM的XSS即通過瀏覽器來直接執行js指令碼,無須提交伺服器,從客戶端的程式碼引起的。
如:其實就是傳送一個合法的地址加自己的指令碼,比如:www.xxx.com/search?wd=<script>...</script>
受害者點選的是www.xxx.com/search?wd=<script>...</script>連結,然後受害者的瀏覽網頁就加入這個惡意程式碼。
儲存XSS攻擊即通過輸入框提交js指令碼或者上傳檔案到伺服器,從網站的資料庫引起的攻擊。
反射XSS攻擊即通過url提交js指令碼到伺服器,從受害人的請求發起引起的攻擊。
解決方案:後端輸出頁面的時候需要進行轉換html實體。嚴格過濾使用者輸入。如:<script>
轉義成 <script>
補充:前端url重定向,比如是採用sso登入模式重定向,容易出現跳轉到其他域。
比如:www.xxx.com/login?redirect=http://abc.com
解決方案:後端針對重定向域進行判斷。
前端檔案上傳,比如是上傳控制元件上傳一些非指定格式的檔案。
解決方案:前後端針對檔案型別進行判斷。
前端檔案下載,比如是下載一些資料(doc,excel,mp4)。
解決方案:後端嚴格控制檔案下載的許可權,限制下載檔案型別,檔案目錄。
PS:xss攻擊的地方很多,html、css、js都有可能會被注入威脅。
3.CSRF攻擊------比xss攻擊更危險的安全性問題
攻擊方式:受害者開啟網站A,登陸網站A,網站A儲存一些cookies在本地(沒有關閉瀏覽器),受害者又開啟網站B,網站B儲存一些惡意cookies,並向網站A傳送受害者的請求(網站B利用
受害者攻擊網站A)。受害者開啟網站B,網站B誘使受害者進行網站A的操作。(假官網盜取使用者資料)
解決方案:驗證 HTTP Referer 欄位,給使用者分配token。
4.SSRF攻擊------變種CSRF攻擊的安全性問題
攻擊方式:常見於分散式站點或者分散式伺服器。攻擊者能巧妙繞過目標伺服器的防火牆,控制目標內網的伺服器,通過內部伺服器與其他伺服器進行互動,從而進行惡意的修改目標伺服器
上的資料。
解決方案:內部伺服器需要設定認證帳號密碼,切記預設帳號。
內部伺服器禁用其他通訊協議,只保留https/http協議。
內部防火牆把內部伺服器的ip或者域名加入黑名單,防止內部伺服器濫用傳送請求。
5.DoS攻擊------常見的具有破壞性的安全性問題(如果是分散式攻擊的話就是DDos攻擊)
攻擊方式:Ping Flood攻擊即利用ping命令不停的傳送的資料包到伺服器。
SYN Flood攻擊即利用tcp協議原理,偽造受害者的ip地址,一直保持與伺服器的連線,導致受害者連線伺服器的時候拒絕服務。
解決方案:設定路由器與交換機的安全配置,即設定防火牆。(涉及到硬體問題我就不多說了,只是提醒一下)
6.DNS快取汙染------常見的網站不可訪問的問題
攻擊方式:第三方可信賴的域名伺服器快取了一些DNS解析,但被別人製造一些假域名伺服器封包汙染了,指向錯誤網址。
解決方案:備多個域名伺服器商。
7.ARP欺騙------常見的竊取資料的安全性問題
攻擊方式:利用ARP欺騙,偽造成閘道器,讓受害者的資料經過攻擊者的電腦,從而抓取別人的使用者資訊。
解決方案:強烈要求資料必須加密傳輸,啟動https協議。
8.中間人攻擊(會話劫持)-----常見的竊取資料的安全性問題
攻擊方式:劫持會話cookies,把受害者(A)與受害者(B)之間通訊經過攻擊者的電腦。(常見於線上聊天系統)
解決方案:使用者進行二次驗證,隨機產生會話ID,會話cookies設定httponly(某些情況下httponly設定無效)。
增加http請求頭資訊。判斷是否是真實使用者的請求。
PS:cookies有兩種。
會話cookies : 建立會話的cookies,關閉瀏覽器失效。
永續性cookies : 持久儲存本地的cookies,到期失效。
cookies也可以進行XSS,CSRF攻擊。(把惡意程式碼存放到cookies裡面)
補充:因為現在大多數的web專案都採用前後端分離的模式開發。前端就通過ajax請求與後臺互動,傳統的sessionid儲存在cookies或者是存放在url是不安全的。所以大多數的web專案
都採用基於token鑑權機制來識別使用者身份。
比如JSON WEB TOKEN驗證機制。
JSON WEB TOKEN(簡稱JWT)是一種基於json,通過http請求頭中Authorization欄位進行前後端身份驗證的規範。此規範靈活性強,效率高,大多數現代web應用都採用這種方法進行身份
驗證。JWT是由三個部分組成,分別頭部、載荷與簽名。
{ "alg": "HS256", //訊息認證碼演算法,當然還有其他演算法。 "typ": "JWT" //標記型別 } //頭部 . //需要這個.符號 { "jti": "51d84ac1-db31-4c3b-9409-e630ebbb83df", //JWT的Id "username": "XXX", //這個不是固定的,可以新增多個自定義欄位 "sub":"logon", //主題欄位 "nbf":"1452356445", //JWT接收時間 "iss": "xdfsdf", //發行主體欄位 "exp": "1452349372" //過期時間欄位 } //載荷 . //需要這個.符號 HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret ) //簽名
對應生成json字串
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 //頭部 . eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ //載荷 . SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c //簽名
注意:千萬不要依賴 “exp” 欄位來處理token過期失效或者是管理會話狀態。因為這個token是在客戶端,而不在服務端。所以服務端必須儲存token,即使用者登入系統後,
服務端會返回一個token(sessionId+userId)給客戶端,並儲存一個token在快取資料庫(如:redis),客戶端每次請求帶token,服務端獲取token後通過加密演算法生成的字元 ,然後匹配自
存放在快取數據庫的token進行比較。
9.後門 -----常見的軟體漏洞問題
後門是指一種繞過安全性控制而獲取對程式或系統訪問權的方法。在軟體的開發階段,程式設計師常會在軟體內建立後門以便可以修改程式中的缺陷。如果後門被其他人知道,
或是在釋出軟體之前沒有刪除,那麼它就成了安全隱患。常見於一些熱補丁更新軟體。
攻擊方式:使用webshell提交惡意的動態網頁到網站伺服器,然後執行惡意的動態頁面(如:www.XXX.xom/惡意頁面.jsp)。
使用滲透測試工具,掃描網站服務端開放埠,訪問敏感目錄(上傳,下載,管理後臺頁面)。
解決方案:所有軟體(配置檔案,伺服器,資料庫等)使用必須採用強密碼,禁止使用弱密碼,禁止使用統一相同帳號與密碼。
使用非對稱後門介面(即非對稱加密介面)進行軟體更新,避免對稱後門介面(即對稱加密介面),給服務端程式加殼處理。
使用蜜罐技術。
PS:蜜罐是指一個包含各種漏洞的系統,模擬一個或多個易受攻擊的主機,給黑客提供一個容易攻擊的目標。
簡單來講,這就是一個調虎離山,欲擒故縱的策略。
10.爬蟲攻擊-----常見的非攻擊性的安全性問題
網路爬蟲嚴格意義上不是一種web攻擊手段,但卻對伺服器造成一定的傷害,不容忽視這種攻擊。
攻擊方式:常見於搜尋引擎爬蟲或者一些前端測試工具,如:PhantomJs,puppeteer等,這些工具可以模擬使用者操作,進行網路爬蟲請求。
解決方案:鑑別請求ip,鑑別請求次數,鑑別請求點選連線,鑑別請求資料格式,比如cookie,Referer等欄位,必要時需要人工時刻監控網站情況,定期要更新前端頁面結構。
PS:以上方案都不能徹底解決網路爬蟲問題,容易誤傷真實使用者。
總結:當然,還用很多攻擊的手段沒有列出來,原因是不常見,而且已經有點偏向於網路黑客方面,與web開發方面無關。以上問題在web開發中需要值得注意的。
解決方案只是一般防禦策略,並不能徹底解決這些問題,俗話說得好,道高一尺,魔高一丈。web安全是一個長期值得研究的問題。
相關推薦
軟體工程師應該關注的web攻擊手段
1.SQL注入------常見的安全性問題。 解決方案:前端頁面需要校驗使用者的輸入資料(限制使用者輸入的型別、範圍、格式、長度),不能只靠後端去校驗使用者資料。一來可以提高後端處理的效率,二來可以提高後端資料的安全。 後端不要動態sql語句,使用儲存過程查詢語句。
Web攻擊手段
1. XSS [ cross site scripting ] 跨站指令碼攻擊 【防】對使用者輸入的資料進行HTML轉義處理; 2. CSRF [cross site request forgery] 跨站請求偽造 【防】將cookie 設定為htt
WEB攻擊手段及防禦第1篇-XSS
概念 XSS全稱為Cross Site Script,即跨站點指令碼攻擊,XSS攻擊是最為普遍且中招率最多的web攻擊方式,一般攻擊者通過在網頁惡意植入攻擊指令碼來篡改網頁,在使用者瀏覽網頁時就能執行惡意的操作,像html、css、img都有可能被攻擊。
WEB攻擊手段及防禦第3篇-CSRF
概念 CSRF全稱即Cross Site Request forgery,跨站點請求偽造,攻擊者通過跨站點進行偽造使用者的請求進行合法的非法操作,其攻擊手法是通過竊取使用者cookie或伺服器session獲取使用者身份,在使用者不知情的情況下在攻擊者伺服器
作為軟體工程師應該具備哪些基本素質
1:團隊精神和協作能力 把它作為基本素質,並不是不重要,恰恰相反,這是程式設計師應該具備的最基本的,也是最重要的安身立命之本。把高水平程式設計師說成獨行俠的都是在囈語,任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇蹟,那些
JAVA軟體工程師應該具備的基本素質(技能)
需具備六大基本 ①良好的編碼能力。 ②自覺的規範意識和團隊精神。 ③認識和運用資料庫的能力。 ④較強的英語閱讀和寫作能力。 ⑤具有軟體工程的概念和求知慾和進取心。 一直都在為之努力。 以上可以把它當成奮鬥的目標。人,一單有了引導的旗幟,就會
為什麼軟體工程師應該養成寫作的習慣?
在學校裡,有“文科生”和“理科生”的區分,學習內容不同,思維方式也有差異。我是一名理科生,大學裡我的專業是電腦科學,畢業後我的工作是軟體工程師。在這個過程中,我發現文理科之間的鴻溝始終無法彌合。我見到的很多工程師害怕寫文章,而文科生看到程式碼就頭疼。 我認為,程式設計師應該養成寫作的習慣。因為寫文章會鍛
總結幾種常見web攻擊手段及其防禦方式
XSS(跨站指令碼攻擊) CSRF(跨站請求偽造) SQL注入 DDOS XSS 概念 全稱是跨站指令碼攻擊(Cross Site Scripting),指攻擊者在網頁中嵌入惡意指令碼程式。 案列 比如說我寫了一個部落格網站,然後攻擊者在上面釋出了一個文
Web攻擊手段--XSS攻擊及預防策略
XSS(Cross Site Scripting)攻擊的全稱是跨站指令碼攻擊,跨站指令碼攻擊的方式是惡意攻擊者在網頁中嵌入惡意指令碼程式,當用戶開啟網頁的時候指令碼程式便在客戶端執行,盜取客戶的cookie及使用者名稱和密碼,下載執行病毒及木馬程式,甚至獲得客戶端的admi
三年Java軟體工程師應該掌握的技能
關於專案經驗 關於專業技能 1、基本語法 static、final、transient等關鍵字的作用 foreach迴圈的原理等等 static: 1.靜態變數 2.靜態方法 3.靜態程式碼塊 final:
測試技術大牛談成長經歷:一個好的軟體測試工程師應該做到這些!
我們在變化中成長。假設你拒盡了變化,你就拒盡了新的美麗和新的機遇。 初始軟體測試 “這是一個杯子,主要用來喝水的,它的質量應該如何考量?” 這是在進入上家公司面試時,測試主管問我的題目,相關的回答已經有點模糊,但從這個問題可以大概瞭解到,測試主管在考察我的測試思維。 首先
成為一個優秀的軟體開發工程師應該具備的能力
很多人都希望成為一個優秀的軟體開發工程師,那麼,成為一個優秀的軟體開發工程師應該具備哪些能力呢? 下面是我個人的見解,有不同想法的歡迎提出討論。 在學習之初,我們往往強調的是開發技術,對於軟體開發者而言,這是最初級也是最簡單的要求。 我們想要把我們學到的知識運用到工
常見的web安全攻擊手段及解決辦法
(1).跨站指令碼攻擊(XSS)。 常見解決辦法:確保輸出到HTML頁面的資料以HTML的方式被轉義 (2).跨站請求偽造攻擊(CSRF)。 採用POST請求,增加攻擊的難度.對請求進行認證,確保該請求確實是使用者本人填寫表單並提交的 (3).Cookie攻擊。 在
多年軟體測試大牛分享成長經歷,一個好的軟體測試工程師應該做到這些!
我們在變化中成長。假設你拒絕了變化,那麼,你就拒盡了新的美麗和新的機遇。 初始軟體測試 “這是一個杯子,主要用來喝水的,它的質量應該如何考量?” 這是在進入上家公司面試時,測試主管問我的題目,相關的回答已經有點模糊,但從這個問題可以大概瞭解到,測試主管在考察我的測試思維。 其次,如何去準確獲取、表現這些需
向著全棧工程師前進!Web前端知識體系精簡
培訓 前端 Web前端技術由html、CSS和JavaScript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是先從某一個點切入,然後不斷地接觸和學習新的知識點,因此對於初學者很難理清楚整個體系的脈絡結構。本文將對Web前端知識體系進行簡單的梳理
web攻擊幾種方法
xss csrf攻擊 開始 logs csrf 淺談 網站 ddos art ddos攻擊 sql註入 xss攻擊 竊取cookie發起攻擊。 csrf攻擊 欺騙用戶訪問設好的網頁,網頁裏請求用戶的網站進行攻擊。 淺談常用的幾種web攻擊方式 從零開始學C
不可不知!4種常見的黑客攻擊手段
安全知識 不同 但是 執行 檢索 使用 cdn 惡作劇 事情 在計算機安全方面,黑客是專註於計算機和網絡系統安全機制的人。今天給大家揭秘4種常見的計算機攻擊手段,讓大家更好了解計算機安全知識。 特洛伊木馬 一個特洛伊木馬是,這似乎是做一件事情,但實際上做一套程序。它
常見的網站攻擊手段和防禦方法
target 層疊樣 web get aik span xss攻擊 跨站 bsp XSS攻擊 XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在
通信設備硬件工程師應該具備的基本能力和知識
arc net des 完成 tag sce rep 復位 pad 對於硬件工程師來說,技術要求究竟是要到什麽程度呢?當然,從從小受到的教育中我們知道對於知識要理解透徹,越深入越好,對於任何一個知識點,通過基本公式,用數學工具推導到最後來驗證高級定律和公式。我想對於這一點,
軟體工程師成長之悟
最近或許有夥伴發現,寫技術實現及細節的變少了,更多是經歷以及思想、規範。莫非是道則道,非常道,你道我也道?然,並不是:)。 當入行四五年時,個人經歷中,從14年開始實習工作到15年轉正,各電信專案現場跑,開發、測試、產品部署及支援運維。16年銀行實時系統開發、測試、運維、部署,最後推進了MapRed