欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

常見(jiàn)JavaWeb安全問(wèn)題和解決方案

 更新時(shí)間:2020年03月20日 13:39:34   作者:風(fēng)繾云流  
這篇文章主要介紹了常見(jiàn)JavaWeb安全問(wèn)題和解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1.SQL注入:程序向后臺(tái)數(shù)據(jù)庫(kù)傳遞SQL時(shí),用戶提交的數(shù)據(jù)直接拼接到SQL語(yǔ)句中并執(zhí)行,從而導(dǎo)入SQL注入攻擊。

字符型注入:黑色部分為拼接的問(wèn)題參數(shù)

select * from t_user where name='test' or '1' = '1';

數(shù)字型注入:黑色部分為拼接的問(wèn)題參數(shù)(對(duì)于強(qiáng)類型語(yǔ)言,字符串轉(zhuǎn)int類型會(huì)拋異常。所以這種注入方式一般出現(xiàn)在php等弱類型語(yǔ)言上)

select * from t_user where id=1;drop table t_userinfo;

搜索型注入:對(duì)表名進(jìn)行猜測(cè)

select * from t_user where userName like ‘%test%' and 1=2 union select 1,2 from t_admin';

修復(fù)方法:

a、在mybatis中使用#把參數(shù)當(dāng)做一個(gè)字符串,不能使用$符號(hào)

b、在JDBC中使用預(yù)編譯的方式對(duì)參數(shù)進(jìn)行綁定,詳細(xì)如下:

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跨站腳本攻擊(惡意將腳本代碼植入到供其他用戶使用的頁(yè)面中)

反射型:經(jīng)過(guò)后端,不經(jīng)過(guò)數(shù)據(jù)庫(kù)

存儲(chǔ)型:經(jīng)過(guò)后端經(jīng)過(guò)數(shù)據(jù)庫(kù)

DOM型:基于文檔對(duì)象模型DOM,通過(guò)控制url參數(shù)觸發(fā)

修復(fù)方法:

a、后臺(tái)設(shè)置XSSFilter,繼承RequestServletWrapper類,對(duì)前端請(qǐng)求中的可控參數(shù)進(jìn)行過(guò)濾

b、服務(wù)端設(shè)置Http-only安全屬性,使瀏覽器控制cookie不被泄露

c、對(duì)引入到DOM中的參數(shù)使用htmlEncodeByRegExp編碼,在對(duì)應(yīng)的展示框中用htmlDecodeByRegExp進(jìn)行解碼(比較常用)

var HtmlUtil = {
   /*1.用正則表達(dá)式實(shí)現(xiàn)html轉(zhuǎn)碼*/
   htmlEncodeByRegExp:function (str){ 
      var s = "";
      if(str.length == 0) return "";
     s = str.replace(/&/g,"&");
      s = s.replace(/</g,"&lt;");
      s = s.replace(/>/g,"&gt;");
      s = s.replace(/ /g,"&nbsp;");
     s = s.replace(/\'/g,"&#39;");
     s = s.replace(/\"/g,"&quot;");
     return s; 
  },
  /*2.用正則表達(dá)式實(shí)現(xiàn)html解碼*/
  htmlDecodeByRegExp:function (str){ 
     var s = "";
     if(str.length == 0) return "";
     s = str.replace(/&amp;/g,"&");
     s = s.replace(/&lt;/g,"<");
     s = s.replace(/&gt;/g,">");
     s = s.replace(/&nbsp;/g," ");
     s = s.replace(/&#39;/g,"\'");
     s = s.replace(/&quot;/g,"\"");
     return s; 
 }
};

3、敏感信息泄露

程序造成的泄露:

  1、服務(wù)端返回冗余敏感數(shù)據(jù):用戶只申請(qǐng)了單個(gè)賬戶的信息,卻返回了多個(gè)用戶的信息

  2、將敏感信息直接寫在前端頁(yè)面的注釋中

  3、寫在配置文件的密碼未進(jìn)行編碼處理

  4、請(qǐng)求參數(shù)敏感信息未脫敏處理(可以將數(shù)據(jù)在前端用RSA加密,后臺(tái)在進(jìn)行解密)

  5、前端展示的敏感信息,沒(méi)有在后臺(tái)進(jìn)行脫敏處理(后臺(tái)對(duì)數(shù)據(jù)進(jìn)行處理,可以將中間部分使用*號(hào)代替)

  6、越權(quán)

4、越權(quán):攻擊者能夠執(zhí)行本身沒(méi)有資格執(zhí)行的權(quán)限

  水平越權(quán):權(quán)限類型不變,權(quán)限Id變化(同等角色下的用戶,不但能夠訪問(wèn)自己私有的數(shù)據(jù),還能訪問(wèn)其他人私有的數(shù)據(jù))

  垂直越權(quán):權(quán)限ID不變,權(quán)限類型變化(即低權(quán)限的角色通過(guò)一些途徑,獲得高權(quán)限的能力)

  交叉越權(quán):上面兩者的交集

修復(fù)方法:

  1、根據(jù)請(qǐng)求攜帶的用戶信息進(jìn)行鑒權(quán)操作,對(duì)當(dāng)前請(qǐng)求攜帶的用戶信息進(jìn)行用戶角色和數(shù)據(jù)權(quán)限匹配。每一個(gè)重要操作的功能、分步操作的每個(gè)階段都進(jìn)行權(quán)限判斷。權(quán)限不足就中斷操作。

5、文件下載:

任意文件下載:下載服務(wù)器的任意文件,web業(yè)務(wù)的代碼,服務(wù)器和系統(tǒng)的具體配置信息,也可以下載數(shù)據(jù)庫(kù)的配置信息,以及對(duì)內(nèi)網(wǎng)的信息探測(cè)等等

文件越權(quán)下載:

修復(fù)方法:

1、針對(duì)任意文件下載的修復(fù),增加當(dāng)前請(qǐng)求下載的文件上一級(jí)的絕對(duì)路徑同配置文件中允許下載的路徑直接的比較(file.getCanonicalFile().getParent()獲取上一級(jí)的絕對(duì)路徑)

if(!file.getCanonicalFile().getParent().equals(new File(Constants.TMP_PATH).getCanonicalPath())){
return ;
}

2、文件越權(quán)下載:允許下載之前對(duì)請(qǐng)求所帶的用戶信息進(jìn)行判斷,擁有足夠的權(quán)限菜允許下載。

6、文件上傳:網(wǎng)絡(luò)攻擊者上傳了一個(gè)可執(zhí)行的文件到服務(wù)器并執(zhí)行。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。

修復(fù)方法:

1、客戶端、服務(wù)端白名單驗(yàn)證(不建議用黑名單),客戶端的校驗(yàn)不夠安全,很容易被繞過(guò)。

String fileName = file.getOriginalFilename();
String extName = fileName.subString(fileName.lastIndexof(".")+1);

獲取上傳文件的后綴名,并同白名單上的后綴名進(jìn)行比較,包含在白名單上則允許通過(guò),不包含則直接中斷請(qǐng)求。

2、MiME類型檢測(cè):文件上傳時(shí)瀏覽器會(huì)在Header中添加MIMETYPE識(shí)別文件類型,服務(wù)端要對(duì)此進(jìn)行檢測(cè)。

String mime = file.getContentType();//獲取文件的ContentType類型值

同白名單上的contentType類型名進(jìn)行比較,包含在白名單上則允許通過(guò),不包含則直接中斷請(qǐng)求。

3、文件內(nèi)容檢測(cè):用不同的方法將不同的文件內(nèi)容流的進(jìn)行讀取。

BufferedImage image = ImageIO.read(file.getInputStream());

7、CSRF:跨站請(qǐng)求偽造,完成CSRF攻擊,需要完成兩個(gè)步驟:1、登錄受信任的網(wǎng)站A,并在本地生成cookie;2、在不登出A的情況下,訪問(wèn)危險(xiǎn)網(wǎng)站B

CSRF本質(zhì)原因:Web的隱式身份驗(yàn)證機(jī)制。Web的身份驗(yàn)證機(jī)制雖然可以保證請(qǐng)求來(lái)自用戶的瀏覽器,但是無(wú)法保證該請(qǐng)求時(shí)用戶批準(zhǔn)發(fā)送的。

修復(fù)方法:

CSRF Token校驗(yàn):在頁(yè)面中添加一個(gè)hidden用于存放token字段,請(qǐng)求發(fā)送時(shí)攜帶token到服務(wù)端,服務(wù)端校驗(yàn)token值是否準(zhǔn)確。不準(zhǔn)確直接中斷操作

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論