亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql語句的注入錯誤指的是什么

發布時間:2020-10-22 14:09:39 來源:億速云 閱讀:172 作者:小新 欄目:MySQL數據庫

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

mysql語句的注入式錯誤就是利用某些數據庫的外部接口將用戶數據插入到實際的SQL語言當中,從而達到入侵數據庫乃至操作系統的目的。攻擊者利用它來讀取、修改或者刪除數據庫內的數據,獲得數據庫中用戶資料和密碼等信息,更嚴重會獲得管理員的權限。

sql注入式錯誤(SQL injection)

SQL Injection 就是利用某些數據庫的外部接口將用戶數據插入到實際的數據庫操作語言(SQL)當中,從而達到入侵數據庫乃至操作系統的目的。它的產生主要是由于程序對用戶輸入的數據沒有進行嚴格的過濾,導致非法數據庫查詢語句的執行。
《深入淺出 MySQL》

危害
攻擊者利用它來讀取、修改或者刪除數據庫內的數據,獲得數據庫中用戶資料和密碼等信息,更嚴重的就是獲得管理員的權限。

例子

 //注入式錯誤
    public static void test3(String name,String passward){
        Connection connection = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            // 加載JDBC 驅動
            Class.forName("com.mysql.jdbc.Driver");
            // 獲得JDBC 連接
            String url = "jdbc:mysql://localhost:3306/tulun";
            connection = DriverManager.getConnection(url,"root","123456");
            //創建一個查詢語句
            st = connection.createStatement();
            //sql語句
            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");

    }

數據庫信息
mysql語句的注入錯誤指的是什么
如上面的代碼所示,用戶名為wjm3’ or '1 = 1,密碼為151515,從數據庫中可以看出我們沒有這樣的用戶,本來應該顯示登錄失敗,但是結果卻是登陸成功,因為or '1 = 1 已經不是用戶名里面的內容了,它現在為SQL 語句里面的內容,不論如何,結果都為true,等于不用輸密碼都可以登錄。這里就產生了安全問題。

解決方法

1. PrepareStatement

 //注入式錯誤
    public static void test3(String name,String passward){
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            // 加載JDBC 驅動
            Class.forName("com.mysql.jdbc.Driver");
            // 獲得JDBC 連接
            String url = "jdbc:mysql://localhost:3306/tulun";
            connection = DriverManager.getConnection(url,"root","123456");
            //創建一個查詢語句
            String sql1 =  "select * from student where name = ? and passward = ?";
            st = connection.prepareStatement(sql1);
           st.setString(1,name);
           st.setString(2,passward);
            //sql語句
            //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");
    }

上面這個代碼不管name 參數是什么,它都只是name 參數,不會作為sql語句的一部分來執行,一般來說推薦這個方法,比較安全。
2.自己定義函數進行校驗

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

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

看完了這篇文章,相信你對mysql語句的注入錯誤指的是什么有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鱼台县| 京山县| 景泰县| 珠海市| 高台县| 贡嘎县| 乡宁县| 石嘴山市| 行唐县| 休宁县| 甘孜| 张家界市| 清苑县| 古蔺县| 襄汾县| 庄浪县| 上林县| 舟山市| 天门市| 同德县| 张家口市| 荆门市| 衡阳市| 新乡市| 宜川县| 太谷县| 怀安县| 西青区| 左云县| 玛多县| 赫章县| 中江县| 上杭县| 五大连池市| 亳州市| 沁水县| 临城县| 开封市| 宿松县| 大渡口区| 太仆寺旗|