對於防止SQL注入的研究(JAVA代碼實現)

來源:互聯網
上載者:User

 

有兩種方法,一種是對登陸的獲得的變數進行特殊字元判斷

一種是在登陸的時候使用PreparedStatement進行查詢,可以有效方式SQL注入

 

第一種方法

SqlString.java

  1. package com.test.util;
  2. public class SqlString {
  3.   public static boolean sql_inj(String str) {
  4.     String inj_str = "':and:exec:insert:select:delete:update:count:*:%:chr:mid:master:truncate:char:declare:;:or:-:+:,";
  5.     String inj_stra[] = inj_str.split(":");
  6.     for (int i = 0; i < inj_stra.length; i++) {
  7.       if (str.indexOf(inj_stra[i])!=-1) {
  8.         return false;
  9.       }
  10.     }
  11.     return true;
  12.   }
  13. }

調用的時候使用如下語句:

boolean f = SqlString.sql_inj(username);

 

PS:我在網上看過以上代碼他們用的分隔字元號是“|”但是我在使用的過程中,發現String inj_stra[] = inj_str.split("|");時是把所有字元號都分開了,不是拆分的字串,而是拆分成字元,我用的JDK1.5,不知道是不是JAVA版本的問題,我查看JDK1.5的API的例子是用的“:”分隔的,所以我也用這個符號分隔,就可以把每個字串拆分開來。

 

第二種方法就是查詢的時候使用PreparedStatement

  1. sql="select * from admin where username=? and password=?";
  2. PreparedStatement psmt= con.prepareStatement(sql);
  3. psmt.setString(1,username);
  4. psmt.setString(2,password);
  5. ResultSet rs = psmt.executeQuery();
  6. if(rs.next){
  7. rs.close();
  8. con.close();
  9. return false;
  10. }
  11. else{
  12. rs.close();
  13. con.close();
  14. return true;
  15. }

這樣就可以了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.