本篇文章總結於各大博客
版權聲明:本文為博主原創文章,歡迎大家轉載。如有錯誤請多多指教。 https://blog.csdn.net/u011794238/article/details/46419911
跨站腳本就是在url上帶上惡意的js關鍵字然后腳本注入了,跨站偽造用戶請求就是沒有經過登陸,用超鏈接或者直接url上敲地址進入系統,類似於sql注入這些都是安全漏洞。
sql注入
1、參數化查詢預處理,如java使用PreparedStatement()處理變量。
2、轉義敏感字符及字符串(SQL的敏感字符包括“exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”><=!-*/()|”,和”空格”)。
3、屏蔽出錯信息:阻止攻擊者知道攻擊的結果。
4、在服務端正式處理之前對提交數據的合法性(合法性檢查主要包括三項:數據類型,數據長度,敏感字符的校驗)進行檢查等,在確認客戶端的輸入合法之前,服務端拒絕進行關鍵性的處理操作。
跨站腳本
一般性建議:轉義或過濾客戶端提交的危險字符,客戶端提交方式包含GET、POST、COOKIE、User-Agent、Referer、Accept-Language等,其中危險字符如下:
建議轉義或過濾以下字符:
[1] |(豎線符號)
[2] & (& 符號)
[3];(分號)
[4] $(美元符號)
[5] %(百分比符號)
[6] @(at 符號)
[7] '(單引號)
[8] ""(引號)
[9] \'(反斜杠轉義單引號)
[10] \""(反斜杠轉義引號)
[11] <>(尖括號)
[12] ()(括號)
[13] +(加號)
[14] CR(回車符,ASCII 0x0d)
[15] LF(換行,ASCII 0x0a)
[16] ,(逗號)
[17] \(反斜杠)
[18] (空格)
[19] . (點號)
過濾以下關鍵字、標簽:alert、img、script、document、document.title、document.write、eval、prompt、onclick、onerror、onmouseenter、onreadystatechange、confirm、javascript、String.fromCharCode、onload、DYNSRC、LOWSRC、behavior、vbscript、msgbox、mocha、livescript、expression。
開發語言的建議:
[1]嚴格控制輸入:
Asp:request
Aspx:Request.QueryString、Form、Cookies、SeverVaiables等
Php:$_GET、$_POST、$_COOKIE、$_SERVER、$_GlOBAL、$_REQUEST等
Jsp:request.getParameter、request.getCookies 等
客戶端提交的變量一般從以上函數獲得,嚴格限制提交的數據長度、類型、字符集。
[2]嚴格控制輸出:
HtmlEncode:對一段指定的字符串應用HTML編碼。
UrlEncode:對一段指定的字符串URL編碼。
XmlEncode:將在XML中使用的輸入字符串編碼。
XmlAttributeEncode:將在XML屬性中使用的輸入字符串編碼
escape:函數可對字符串進行編碼
decodeURIComponent:返回統一資源標識符的一個已編碼組件的非編碼形式。
encodeURI:將文本字符串編碼為一個有效的統一資源標識符 (URI)。" "get型xss:
跨站請求偽造
方案一、存在漏洞的頁面加驗證碼或手機短信驗證
方案二、檢測HTTP請求中的訪問來源是否可信,對http頭中的referer進行過濾,只允許本域站點
方案三、一次性令牌Token
添加一個參數Token,其值是隨機的。這樣攻擊者因為不知道Token而無法構造出合法的請求進行攻擊。實現方法:首先服務器端要以某種策略生成隨機字符串,作為令牌(token),保存在 Session 里。然后在發出請求的頁面,把該令牌以隱藏域一類的形式,與其他信息一並發出。在接收請求的頁面,把接收到的信息中的令牌與 Session 中的令牌比較,只有一致的時候才處理請求,否則拒絕請求或者要求用戶重新登陸驗證身份。
Token 使用原則:
Token要足夠隨機————只有這樣才算不可預測
Token是一次性的,即每次請求成功后要更新Token————這樣可以增加攻擊難度,增加預測難度
Token要注意保密性————敏感操作使用post,防止Token出現在URL中
方案四、臨時cookie:對會話進行時效限制,將持久化的授權方法(例如cookie或者HTTP授權)切換為短時或瞬時的授權方法
方案五、session標記隨機生成;確認已有的session標記無法被二次使用
方案六、過濾用戶輸入,例如論壇、博客等,不允許發布含有站內操作URL的鏈接(作用有限,因為可以通過qq、第三方網站進行發布,圖片形式會自動加載等)
方案七、根據不可預測性原則,我們可以對參數進行加密從而防止CSRF攻擊。"
已解密的登錄請求 對諸如用戶名、密碼和信用卡號之類的敏感輸入字段進行加密傳遞
會話定置 "COOKIE中的登陸前JSESSIONID與登陸后JESSIONID不能相同
例如在登錄頁面上加上一段代碼:
request.getSession().invalidate() ; //清空session
if (request.getCookies()!=null) {
Cookie cookie = request.getCookies()[0]; // 獲取cookie
cookie.setMaxAge(0); // 讓cookie過期
}"
文件上傳
[1]嚴格判斷上傳文件的類型,設置上傳文件白名單,只允許上傳指定類型的文件。
[2]禁止在上傳目錄下執行腳本。
[3]上傳文件的目錄必須是http請求無法直接訪問到的。如果需要訪問的,必須上傳到其他(和web服務器不同的)域名下,並設置該目錄為不解析jsp等腳本語言的目錄。
[4]上傳文件要保存的文件名和目錄名由系統根據時間生成,不允許用戶自定義。
[5]圖片上傳,要通過處理(縮略圖、水印等),無異常后才能保存到服務器。"
jQuery跨站腳本
"升級Jquery到1.7版本以上,或在js中修改如下行,quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/
修改為:quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/"
啟用了不安全的HTTP方法
---------------------
作者:LinkinPark8林肯
來源:CSDN
原文:https://blog.csdn.net/u011794238/article/details/46419911
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
目前我知道的,存儲型xss解決方法:過濾轉義用戶輸入的腳本、標簽,csrf漏洞解決方法:校驗referer、加token、加驗證碼
而referer校驗是針對存在referer的情況,因為某些請求的head里沒有referer,這時不能判斷請求是非法的;加token,保存在哪是個問題,如果保存在session中,當集群部署時,session不同步會導致客戶端的token與處理請求的服務器的token不一致;加驗證碼同樣的道理,而且對用戶體驗非常不好。
由於xss和csrf都是改變用戶請求參數來達到惡意攻擊的目的,所以,如果我們從參數改變這一點切入,就沒有問題了,做法很簡單:
將參數加密后傳遞,這樣請求被攔截篡改的參數將不能被服務器解密,因而拒絕請求。
前台需要兩個加密方法:
1、md5加密 參數列表
2、des加密 參數列表進行md5加密的順序
后台需要一個加密和一個解密方法:
1、同樣的md5加密方法
2、des解密方法
參數列表中參數均為請求傳遞參數,參數值為空的可過濾掉
需要為解決漏洞而添加的幾個參數:
1、sign簽名:參數列表參數md5加密后字符串,比如參數id=1&name=Tobey Black&sex=baby,那么假設通過md5加密(增加隨機數等這里略):
md5(1,'Tobey Black','baby')得到123G1JH123G(由於不能解密所以無法偽造)。
2、order參數順序:參數列表中參數進行md5加密的順序,根據1得到參數加密順序為id,name,sex,對"id,name,sex"進行des加密。
3、filter被過濾特殊字符的參數:考慮到當參數值含有特殊字符如單引號、空格、換行、尖括號等進行md5加密的結果前后台不一致(js對這些字符進行轉義),所以,這些參數要過濾特殊字符再md5處理,這里對name進行過濾(多個還是用逗號拼接),得到TobeyBlack,最后把它des加密。
現在就可以提交請求了,到后台處理方法:
將參數id=1&name=Tobey Black&sex=baby進行遍歷,按照order中參數名的順序取出參數值,並對filter中出現的參數名的參數值進行特殊字符過濾,拼接成"1TobeyBlackbaby",對其md5加密,得到值跟sign對比,正確才向下執行,否則攔截請求。
---------------------
作者:aliveClass
來源:CSDN
原文:https://blog.csdn.net/aya19880214/article/details/45893641
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!