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);
          ...
          這個東西很簡單,也很常見,方法還有很多,如果您有好的方法希望貼出來,大家一起學習學習。
            回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 金坛市| 化德县| 安陆市| 拉孜县| 凌源市| 读书| 孟连| 金溪县| 杂多县| 云霄县| 东兰县| 石渠县| 马龙县| 沿河| 大兴区| 阳城县| 阜平县| 临夏县| 大埔区| 黔西县| 馆陶县| 楚雄市| 兖州市| 安图县| 临城县| 资源县| 安丘市| 留坝县| 桃江县| 鹿泉市| 扶沟县| 宣武区| 莱阳市| 共和县| 洮南市| 京山县| 湘阴县| 通江县| 崇文区| 城固县| 永川市|