您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關常見JavaWeb安全問題有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1.SQL注入:程序向后臺數據庫傳遞SQL時,用戶提交的數據直接拼接到SQL語句中并執行,從而導入SQL注入攻擊。
字符型注入:黑色部分為拼接的問題參數
select * from t_user where name='test' or '1' = '1';
數字型注入:黑色部分為拼接的問題參數(對于強類型語言,字符串轉int類型會拋異常。所以這種注入方式一般出現在php等弱類型語言上)
select * from t_user where id=1;drop table t_userinfo;
搜索型注入:對表名進行猜測
select * from t_user where userName like ‘%test%' and 1=2 union select 1,2 from t_admin';
修復方法:
a、在mybatis中使用#把參數當做一個字符串,不能使用$符號
b、在JDBC中使用預編譯的方式對參數進行綁定,詳細如下:
String userName = request.getParameter("userName"); String sql = "select * from t_user where userName = ?"; JdbcConnection conn = new JdbcConnection(); PreparedStatement pstmt = conn.preparedStatement(sql); pstmt.setString(1,userName);
2、XSS跨站腳本攻擊(惡意將腳本代碼植入到供其他用戶使用的頁面中)
反射型:經過后端,不經過數據庫
存儲型:經過后端經過數據庫
DOM型:基于文檔對象模型DOM,通過控制url參數觸發
修復方法:
a、后臺設置XSSFilter,繼承RequestServletWrapper類,對前端請求中的可控參數進行過濾
b、服務端設置Http-only安全屬性,使瀏覽器控制cookie不被泄露
c、對引入到DOM中的參數使用htmlEncodeByRegExp編碼,在對應的展示框中用htmlDecodeByRegExp進行解碼(比較常用)
var HtmlUtil = { /*1.用正則表達式實現html轉碼*/ htmlEncodeByRegExp:function (str){ var s = ""; if(str.length == 0) return ""; s = str.replace(/&/g,"&"); s = s.replace(/</g,"<"); s = s.replace(/>/g,">"); s = s.replace(/ /g," "); s = s.replace(/\'/g,"'"); s = s.replace(/\"/g,"""); return s; }, /*2.用正則表達式實現html解碼*/ htmlDecodeByRegExp:function (str){ var s = ""; if(str.length == 0) return ""; s = str.replace(/&/g,"&"); s = s.replace(/</g,"<"); s = s.replace(/>/g,">"); s = s.replace(/ /g," "); s = s.replace(/'/g,"\'"); s = s.replace(/"/g,"\""); return s; } };
3、敏感信息泄露
程序造成的泄露:
1、服務端返回冗余敏感數據:用戶只申請了單個賬戶的信息,卻返回了多個用戶的信息
2、將敏感信息直接寫在前端頁面的注釋中
3、寫在配置文件的密碼未進行編碼處理
4、請求參數敏感信息未脫敏處理(可以將數據在前端用RSA加密,后臺在進行解密)
5、前端展示的敏感信息,沒有在后臺進行脫敏處理(后臺對數據進行處理,可以將中間部分使用*號代替)
6、越權
4、越權:攻擊者能夠執行本身沒有資格執行的權限
水平越權:權限類型不變,權限Id變化(同等角色下的用戶,不但能夠訪問自己私有的數據,還能訪問其他人私有的數據)
垂直越權:權限ID不變,權限類型變化(即低權限的角色通過一些途徑,獲得高權限的能力)
交叉越權:上面兩者的交集
修復方法:
1、根據請求攜帶的用戶信息進行鑒權操作,對當前請求攜帶的用戶信息進行用戶角色和數據權限匹配。每一個重要操作的功能、分步操作的每個階段都進行權限判斷。權限不足就中斷操作。
5、文件下載:
任意文件下載:下載服務器的任意文件,web業務的代碼,服務器和系統的具體配置信息,也可以下載數據庫的配置信息,以及對內網的信息探測等等
文件越權下載:
修復方法:
1、針對任意文件下載的修復,增加當前請求下載的文件上一級的絕對路徑同配置文件中允許下載的路徑直接的比較(file.getCanonicalFile().getParent()獲取上一級的絕對路徑)
if(!file.getCanonicalFile().getParent().equals(new File(Constants.TMP_PATH).getCanonicalPath())){ return ; }
2、文件越權下載:允許下載之前對請求所帶的用戶信息進行判斷,擁有足夠的權限菜允許下載。
6、文件上傳:網絡攻擊者上傳了一個可執行的文件到服務器并執行。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。
修復方法:
1、客戶端、服務端白名單驗證(不建議用黑名單),客戶端的校驗不夠安全,很容易被繞過。
String fileName = file.getOriginalFilename();
String extName = fileName.subString(fileName.lastIndexof(".")+1);
獲取上傳文件的后綴名,并同白名單上的后綴名進行比較,包含在白名單上則允許通過,不包含則直接中斷請求。
2、MiME類型檢測:文件上傳時瀏覽器會在Header中添加MIMETYPE識別文件類型,服務端要對此進行檢測。
String mime = file.getContentType();//獲取文件的ContentType類型值
同白名單上的contentType類型名進行比較,包含在白名單上則允許通過,不包含則直接中斷請求。
3、文件內容檢測:用不同的方法將不同的文件內容流的進行讀取。
BufferedImage image = ImageIO.read(file.getInputStream());
7、CSRF:跨站請求偽造,完成CSRF攻擊,需要完成兩個步驟:1、登錄受信任的網站A,并在本地生成cookie;2、在不登出A的情況下,訪問危險網站B
CSRF本質原因:Web的隱式身份驗證機制。Web的身份驗證機制雖然可以保證請求來自用戶的瀏覽器,但是無法保證該請求時用戶批準發送的。
修復方法:
CSRF Token校驗:在頁面中添加一個hidden用于存放token字段,請求發送時攜帶token到服務端,服務端校驗token值是否準確。不準確直接中斷操作
感謝各位的閱讀!關于“常見JavaWeb安全問題有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。