修復SQL注入、XSS等注入類弱點漏洞


2016-11-04  10:18:35
 
   

通過攔截請求修復SQL注入、XSS等注入類弱點漏洞

 
 

先對什么是注入類攻擊做一個簡單的介紹。

當你在輸入框中輸入一個查詢時,返回的請求是類似於
SELECT * from tablename WHERE XXX="String"(String是你輸入的內容)
而所謂的注入類就是:
SELECT * from tablename WHERE XXX="String" or 1=1 DELETE * from * WHERE "*"
因為1=1 是成立的,所以后面的刪除語句也會執行,結果就是清空了數據庫,當然作為搞灰產的人來說一般不會去做清空,只是返回出所有的數據庫內的信息,通過這些信息去做些工作。

這里有兩個重點需要說明:

1.在頁面上通過js或者樣式來限制輸入長度是沒有用的,因為可以直接從URL當中執行。
比如http:// middle.jsp?userid=String" or 1=1 DELETE * from * WHERE "*
一樣可以實現注入,並不是一定要從輸入框中操作。所以一般不會對輸入框的輸入長度做限制,除了為了好看,並不會起到實際性的作用。
2.要明確,我們是通過對請求內輸入的內容做驗證,來完成攔截注入的目標。所以,我們不是攔截整個請求。怎么做到這樣呢?通過將輸入的內容參數化,對參數進行驗證。所以不能采用SQL拼接的方式來構建請求,實際上就現在而言,什么情況下都應該采用預編譯的模式而不是SQL拼接的方式。至於為什么,雖然是顯而易見的但是還是明確下。不管是SQL拼接的方式或者沒有對輸入內容參數化,那么都只能對請求本身做驗證,但是請求本身就是個SQL語句,那么所有請求就都過去了呀。對於XSS也是同樣的。
 

通用類:

 1 //使用到的包,用來做正則驗證
 2 import java.util.regex.Matcher;
 3 import java.util.regex.Pattern;
 4 
 5 /*
 6  * request check
 7  * @author keep
 8  * @since JDK1.6
 9  * @history 2016-10-17 keep set
10  */
11 
12 public class SqlRequestCheck{
13     public static boolean check(String getit){
14     //返回為布爾類型,方便引用時使用,getit即請求中用戶輸入的內容    
15     String pattern = "^[|]+[&]+[;]+[:]+[%]+[+]+[CR]+[LF]+[SELECT]+[FROM]+[UPDATE]+[UNION]+[DELETE]+[WHERE]+[or]$";//正則表達式
16         // 創建 Pattern 對象,即reg
17         Pattern r = Pattern.compile(pattern);
18         // 現在創建 matcher 對象
19         Matcher m = r.matcher(getit);
20         boolean rs = m.find();
21         if (rs == true){
22            //如果結果為true則輸入的內容中包含這些非法字符
23            // System.out.println(m.replaceAll("輸入中存在非法字符!!!!"));看情況使用
24             return false;
25         }
26         return true;
27     } 
28 }

 

 
 

引用的方式:

 
方式一 對於返回值為空的函數
1 SqlRequestCheck sqlr=new SqlRequestCheck();
2 //input是代表輸入內容的參數,如果驗證非真則不執行之后的程序
3 if(!sqlr.check(input)){
4 System.out.println("輸入非法字符!");
5 return;
6 }
7 }

 

方式二 對於返回值為不能空的函數
1 SqlRequestCheck sqlr=new SqlRequestCheck();
2 //input是代表輸入內容的參數,如果驗證非真則不執行之后的程序
3 if(!sqlr.check(input)){
4 System.out.println("輸入非法字符!");
5 return null;//此時有些事限制不能出現布爾類型的,故直接返回null就好了
6 }
7 }

 

 轉載請注明出處: http://www.cnblogs.com/stefankeep/
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM