久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

151次閱讀
沒有評論

共計 2363 個字符,預計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下 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 語句的注入錯誤指的是什么有了一定的了解,想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計2363字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 淄博市| 奉新县| 社旗县| 昌邑市| 道孚县| 长白| 姚安县| 永昌县| 贵南县| 亚东县| 容城县| 寿阳县| 长顺县| 郓城县| 无为县| 图们市| 古田县| 屏东县| 田阳县| 额尔古纳市| 昂仁县| 饶阳县| 和田市| 嵊泗县| 永仁县| 尼玛县| 南通市| 阿城市| 南平市| 鄢陵县| 班戈县| 富民县| 绿春县| 台北市| 隆化县| 和平区| 鸡东县| 三明市| 浑源县| 沁源县| 得荣县|