mysql語(yǔ)句的注入錯(cuò)誤指的是什么

小編給大家分享一下MySQL語(yǔ)句的注入錯(cuò)誤指的是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

目前成都創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、太子河網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

mysql語(yǔ)句的注入式錯(cuò)誤就是利用某些數(shù)據(jù)庫(kù)的外部接口將用戶數(shù)據(jù)插入到實(shí)際的SQL語(yǔ)言當(dāng)中,從而達(dá)到入侵?jǐn)?shù)據(jù)庫(kù)乃至操作系統(tǒng)的目的。攻擊者利用它來(lái)讀取、修改或者刪除數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù),獲得數(shù)據(jù)庫(kù)中用戶資料和密碼等信息,更嚴(yán)重會(huì)獲得管理員的權(quán)限。

sql注入式錯(cuò)誤(SQL injection)

SQL Injection 就是利用某些數(shù)據(jù)庫(kù)的外部接口將用戶數(shù)據(jù)插入到實(shí)際的數(shù)據(jù)庫(kù)操作語(yǔ)言(SQL)當(dāng)中,從而達(dá)到入侵?jǐn)?shù)據(jù)庫(kù)乃至操作系統(tǒng)的目的。它的產(chǎn)生主要是由于程序?qū)τ脩糨斎氲臄?shù)據(jù)沒(méi)有進(jìn)行嚴(yán)格的過(guò)濾,導(dǎo)致非法數(shù)據(jù)庫(kù)查詢語(yǔ)句的執(zhí)行。
《深入淺出 MySQL》

危害
攻擊者利用它來(lái)讀取、修改或者刪除數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù),獲得數(shù)據(jù)庫(kù)中用戶資料和密碼等信息,更嚴(yán)重的就是獲得管理員的權(quán)限。

例子

 //注入式錯(cuò)誤
    public static void test3(String name,String passward){
        Connection connection = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            // 加載JDBC 驅(qū)動(dòng)
            Class.forName("com.mysql.jdbc.Driver");
            // 獲得JDBC 連接
            String url = "jdbc:mysql://localhost:3306/tulun";
            connection = DriverManager.getConnection(url,"root","123456");
            //創(chuàng)建一個(gè)查詢語(yǔ)句
            st = connection.createStatement();
            //sql語(yǔ)句
            String sql = "select * from student where name = '"+ name+"' and passward = '"+passward+"'";
            rs = st.executeQuery(sql);

            if(rs.next()){
                System.out.println("登錄成功。");
            }else{
                System.out.println("登錄失敗。");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
       
        test3("wjm3' or '1 = 1","151515");

    }

數(shù)據(jù)庫(kù)信息
mysql語(yǔ)句的注入錯(cuò)誤指的是什么
如上面的代碼所示,用戶名為wjm3’ or '1 = 1,密碼為151515,從數(shù)據(jù)庫(kù)中可以看出我們沒(méi)有這樣的用戶,本來(lái)應(yīng)該顯示登錄失敗,但是結(jié)果卻是登陸成功,因?yàn)閛r '1 = 1 已經(jīng)不是用戶名里面的內(nèi)容了,它現(xiàn)在為SQL 語(yǔ)句里面的內(nèi)容,不論如何,結(jié)果都為true,等于不用輸密碼都可以登錄。這里就產(chǎn)生了安全問(wèn)題。

解決方法

1. PrepareStatement

 //注入式錯(cuò)誤
    public static void test3(String name,String passward){
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            // 加載JDBC 驅(qū)動(dòng)
            Class.forName("com.mysql.jdbc.Driver");
            // 獲得JDBC 連接
            String url = "jdbc:mysql://localhost:3306/tulun";
            connection = DriverManager.getConnection(url,"root","123456");
            //創(chuàng)建一個(gè)查詢語(yǔ)句
            String sql1 =  "select * from student where name = ? and passward = ?";
            st = connection.prepareStatement(sql1);
           st.setString(1,name);
           st.setString(2,passward);
            //sql語(yǔ)句
            //String sql = "select * from student where name = '"+ name+"' and passward = '"+passward+"'";
            rs = st.executeQuery();

            if(rs.next()){
                System.out.println("登錄成功。");
            }else{
                System.out.println("登錄失敗。");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                connection.close();
                st.close();
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
     public static void main(String[] args) {
        test3("wjm3' or '1 = 1","151515");
    }

上面這個(gè)代碼不管name 參數(shù)是什么,它都只是name 參數(shù),不會(huì)作為sql語(yǔ)句的一部分來(lái)執(zhí)行,一般來(lái)說(shuō)推薦這個(gè)方法,比較安全。
2.自己定義函數(shù)進(jìn)行校驗(yàn)

  • 整理數(shù)據(jù)使之變得有效
  • 拒絕已知的非法輸入
  • 只接受已知的合法輸入

所以如果想要獲得最好的安全狀態(tài),目前最好的解決辦法就是對(duì)用戶提交或者可能改變的數(shù)據(jù)進(jìn)行簡(jiǎn)單分類(lèi),分別應(yīng)用正則表達(dá)式來(lái)對(duì)用戶提供的輸入數(shù)據(jù)進(jìn)行嚴(yán)格的檢測(cè)和驗(yàn)證。
其實(shí)只需要過(guò)濾非法的符號(hào)組合就可以阻止已知形式的攻擊,并且如果發(fā)現(xiàn)更新的攻擊符號(hào)組合,也可以將這些符號(hào)組合增添進(jìn)來(lái),繼續(xù)防范新的攻擊。特別是空格符號(hào)和其產(chǎn)生相同作用的分隔關(guān)鍵字的符號(hào),例如“/**/”,如果能成功過(guò)濾這種符號(hào),那么有很多注入攻擊將不能發(fā)生,并且同時(shí)也要過(guò)濾它們的十六進(jìn)制表示“%XX”。

看完了這篇文章,相信你對(duì)mysql語(yǔ)句的注入錯(cuò)誤指的是什么有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章題目:mysql語(yǔ)句的注入錯(cuò)誤指的是什么
分享網(wǎng)址:http://muchs.cn/article4/pphsie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站策劃關(guān)鍵詞優(yōu)化、云服務(wù)器、軟件開(kāi)發(fā)、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)