1.SQL注入------常見的安全性問題。css
解決方案:前端頁面須要校驗用戶的輸入數據(限制用戶輸入的類型、範圍、格式、長度),不能只靠後端去校驗用戶數據。一來能夠提升後端處理的效率,二來能夠提升後端數據的安全。html
後端不要動態sql語句,使用存儲過程查詢語句。限制用戶訪問數據庫權限。後端接受前端的數據時要過濾一些特殊字符(如:「--」等字符)前端
後端若是出現異常的話,要使用自定義錯誤頁,防止用戶經過服務器默認的錯誤頁面找到服務器漏洞。java
java版程序員
安全查詢(參數化查詢)web
//獲取參數,拆分參數
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();
安全查詢(存儲過程)ajax
//獲取參數
String custname = request.getParameter("customerName");
try {
//調用數據庫的存儲過程 CallableStatement cs = connection.prepareCall("{call sp_getAccountBalance(?)}"); //將參數格式化
cs.setString(1, custname);
//獲取查詢結果 ResultSet results = cs.executeQuery();
} catch (SQLException se) { }
不安全查詢redis
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攻擊------相對複雜的安全性問題sql
攻擊方式:基於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協議。
PS:ARP 即 Address Resolution Protocol(地址解析協議),是一種用於接收設備MAC地址的協議。
MAC 即 Media Access Control (媒體訪問控制),用於代表設備在網絡上的身份(網卡的身份號),具備全球惟一性。這裏的惟一性指當前網絡的網卡的身份號是惟一的,不表明MAC
地址不可修改,MAC地址有兩種修改方式,一是硬件擦寫,從新把MAC地址寫進設備,二是軟件修改,在系統上修改MAC地址。
8.中間人攻擊(會話劫持)-----常見的竊取資料的安全性問題
攻擊方式:劫持會話cookies,把受害者(A)與受害者(B)之間通訊通過攻擊者的電腦。(常見於在線聊天系統)
解決方案:用戶進行二次驗證,隨機產生會話ID,會話cookies設置httponly(某些狀況下httponly設置無效)。
增長http請求頭信息。判斷是不是真實用戶的請求。
使用https協議。
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安全是一個長期值得研究的問題。