什么是SQL注入?帶你從零開始認(rèn)識(shí)SQL注入

從零開始認(rèn)識(shí)SQL注入 ,什么是SQL注入?sql注入就是本來我只有我能操作數(shù)據(jù)庫,本來只是讓你輸入內(nèi)容就走,而你卻輸入命令,從而在我不知情下操作數(shù)據(jù)庫

SQL注入

1.什么是SQL注入

  • 看一下下面的案例場景,這是正常情況下的登陸場景:

什么是SQL注入?帶你從零開始認(rèn)識(shí)SQL注入

  • 而當(dāng)我們使用 用戶名‘:– 的時(shí)候,密碼隨便輸入也可以登陸成功↓

什么是SQL注入?帶你從零開始認(rèn)識(shí)SQL注入

  • 這時(shí)候?qū)Ρ葍蓷lsql就能發(fā)現(xiàn),其實(shí)用戶通過在用戶名寫入的sql符號(hào)將內(nèi)部sql提前結(jié)束,并且將后半句檢索條件注釋起來達(dá)到免密碼登陸效果。

sql注入就是本來我只有我能操作數(shù)據(jù)庫,本來只是讓你輸入內(nèi)容就走,而你卻輸入命令,從而在我不知情下操作數(shù)據(jù)庫

2.漏洞的修復(fù)

  • 會(huì)產(chǎn)生上門面的情況是因?yàn)樯厦娴膕ql是使用動(dòng)態(tài)拼接的方式,所以sql傳入的方式可能改變sql的語義。

動(dòng)態(tài)拼接就是在java中java變量和sql語句混合使用:select * from user where userName=’”+userName+”’ and password = ‘”+password”’

  • 所以要使用preparedStatement的參數(shù)化sql,通過先確定語義,再傳入?yún)?shù),就不會(huì)因?yàn)閭魅氲膮?shù)改變sql的語義。(通過setInt,setString,setBoolean傳入?yún)?shù))

3.參數(shù)化sql使用案例

????????????//建立數(shù)據(jù)連接 ????????????conn=ds.getConnection(); ????????????//1.設(shè)置prepareStatement帶占位符的sql語句 ????????????PreparedStatement?ptmt?=?conn.prepareStatement("select?*?from?user?where?userName?=???and?password?=??"); ????????????ptmt.setString(1,?"張三");??????//2.設(shè)置參數(shù) ????????????ptmt.setString(2,?"123456"); ????????????rs=ptmt.executeQuery();?????  ????????????while(rs.next()){ ????????????????System.out.println("登陸成功"); ????????????????return; ????????????} ????????????System.out.println("登陸失敗");

參數(shù)化特點(diǎn):

1.設(shè)置preparedStatement帶占位符的sql語句

statement執(zhí)行sql語句的方式:

stmt=conn.createStatement(); rs=stmt.executeQuery("select?userName?from?user");

2.設(shè)置參數(shù)

PerparedStatement繼承于Statement,這里主要使用的使他參數(shù)化sql的特性。

轉(zhuǎn):https://blog.csdn.net/qq_30258957/article/details/78145885

加:1.都是用來執(zhí)行SQL的 PreparedStatement extends Statement;

2.Statement適合執(zhí)行靜態(tài)(無條件)SQL? PreparedStatement適合執(zhí)行動(dòng)態(tài)(有條件)SQL;

3.PreparedStatement可以避免注入攻擊;

?相關(guān)文章:

一個(gè)自認(rèn)為很安全的PHP防SQL注入?求破解

一個(gè)自認(rèn)為很安全的PHP防SQL注入?求破解

相關(guān)視頻:

一個(gè)自認(rèn)為很安全的PHP防SQL注入?求破解

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享