Gosling的夾子
          我在天空寫下你的名字,被風兒帶走了;我在沙灘寫下你的名字,被浪花帶走了;于是我在大街小巷的每一個角落寫下你的名字,我靠!!我被警察帶走了!
          posts - 5,comments - 4,trackbacks - 0

          吐血詢問Jsp中怎么防止Sql注入?

          網上找了半天也沒找到,只有asp的,只能發這了,往高人指點啊

          原來以為只有asp可以注入,今天試了試jsp的居然也有啊,暈

          這應該是個很普遍的問題,希望管理員別刪

          還有我的程序基本結束了,可能的話,希望有個比較簡介的方法,

          期待中啊!!!!!


          asp中完美的解決方案


          FeedBack:
          # 一家上海的專業翻譯公司
          2006-08-09 16:03 | allenxv
          好!


          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          前不久找到一專業翻譯公司,上海的大家可以到他們的網站上去看看!

          [url=http://www.acmetranslation.com]上海翻譯公司[/url]
          [url=http://www.paper-translation.com]翻譯公司[/url]
          一家上海的專業翻譯公司  回復  更多評論
            
          # re: 吐血詢問Jsp中怎么防止Sql注入?
          2007-05-11 21:55 | dsfg
          dfdsfsdf
          我是玉
          dfi
          ewq
          wq efie
          dsfdi dsifajs
          dsfasf
          q j 我是入  回復  更多評論
            
          # re: 吐血詢問Jsp中怎么防止Sql注入?
          2007-05-11 21:56 | dsfg
          q我是奪  回復  更多評論
            
          # re: 吐血詢問Jsp中怎么防止Sql注入?
          2007-12-31 11:02 | 拽拽
          SQL 注入簡介:
          SQL注入是最常見的攻擊方式之一,它不是利用操作系統或其它系統的漏洞來實現攻擊的,而是程序員因為沒有做好判斷,被不法

          用戶鉆了SQL的空子,下面我們先來看下什么是SQL注入:

          比如在一個登陸界面,要求用戶輸入用戶名和密碼:

          用戶名: ' or 1=1 --

          密 碼:

          點登陸,如若沒有做特殊處理,而只是一條帶條件的查詢語句如:

          String sql="select * from users where username='"+userName+"' and password='"+password+"' "

          那么這個非法用戶就很得意的登陸進去了.(當然現在的有些語言的數據庫API已經處理了這些問題)

          這是為什么呢?我們來看看這條語句,將用戶輸入的數據替換后得到這樣一條語句:

          select * from users where username='' or 1=1 --' and password=''

          為了更明白些,可以將其復制到SQL分析器中,將會發現,這條語句會將數據庫的數據全部讀出來,為什么呢?

          很簡單,看到條件后面 username='' or 1=1 用戶名等于 '' 或 1=1 那么這個條件一定會成功,然后后面加兩個-,這意味著

          什么?沒錯,注釋,它將后面的語句注釋,讓他們不起作用,這樣就可以順利的把數據庫中的數據讀取出來了。

          這還是比較溫柔的,如果是執行
          select * from users where username='' ;DROP Database (DB Name) --' and password=''

          .......其他的您可以自己想象。。。

          那么我們怎么來處理這種情況呢?下面我以java為列給大家兩種簡單的方法:

          第一種采用預編譯語句集,它內置了處理SQL注入的能力,只要使用它的setString方法傳值即可:
          String sql= "select * from users where username=? and password=?;
          PreparedStatement preState = conn.prepareStatement(sql);
          preState.setString(1, userName);
          preState.setString(2, password);
          ResultSet rs = preState.executeQuery();
          ...

          第二種是采用正則表達式將包含有 單引號('),分號(;) 和 注釋符號(--)的語句給替換掉來防止SQL注入
          public static String TransactSQLInjection(String str)
          {
          return str.replaceAll(".*([';]+|(--)+).*", " ");
          }

          userName=TransactSQLInjection(userName);
          password=TransactSQLInjection(password);

          String sql="select * from users where username='"+userName+"' and password='"+password+"' "
          Statement sta = conn.createStatement();
          ResultSet rs = sta.executeQuery(sql);
          ...
          這個東西很簡單,也很常見,方法還有很多,如果您有好的方法希望貼出來,大家一起學習學習。
            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 虹口区| 嘉黎县| 衡水市| 会同县| 新晃| 宜都市| 金溪县| 古蔺县| 林甸县| 大渡口区| 隆林| 崇礼县| 佛学| 汽车| 白沙| 东兰县| 岑溪市| 鄄城县| 义马市| 乳山市| 河西区| 永胜县| 通道| 鄄城县| 中宁县| 莱西市| 会宁县| 沙坪坝区| 太仆寺旗| 桂林市| 汽车| 海宁市| 民权县| 日喀则市| 曲阜市| 建始县| 香格里拉县| 马鞍山市| 夏邑县| 文成县| 万载县|