明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

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

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

SQL注入

1.什么是SQL注入

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

a.png

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

b.png

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

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

2.漏洞的修復(fù)

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

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

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

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

            //建立數(shù)據(jù)連接
            conn=ds.getConnection();
            //1.設(shè)置prepareStatement帶占位符的sql語(yǔ)句
            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語(yǔ)句

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

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)(無(wú)條件)SQL PreparedStatement適合執(zhí)行動(dòng)態(tài)(有條件)SQL;

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

相關(guān)文章:

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

深入了解SQL注入和預(yù)防措施

相關(guān)視頻:

防御sql注入-PHP實(shí)戰(zhàn)商城開發(fā)視頻教

以上就是什么是SQL注入?帶你從零開始認(rèn)識(shí)SQL注入的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。