日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java防止sql注入的几个途径_Java防止SQL注入的几个途径

發(fā)布時(shí)間:2023/12/10 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java防止sql注入的几个途径_Java防止SQL注入的几个途径 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java防SQL注入,最簡單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因?yàn)樵谠蠸QL語句中加入了新的邏輯,如果使用 PreparedStatement來代替Statement來執(zhí)行SQL語句,其后只是輸入?yún)?shù),SQL注入攻擊手段將無效,這是因?yàn)?PreparedStatement不允許在不同的插入時(shí)間改變查詢的邏輯結(jié)構(gòu) ,大部分的SQL注入已經(jīng)擋住了, 在WEB層我們可以過濾用戶的輸入來防止SQL注入比如用Filter來過濾全局的表單參數(shù)

01? import java.io.IOException;

02? import java.util.Iterator;

03? import javax.servlet.Filter;

04? import javax.servlet.FilterChain;

05? import javax.servlet.FilterConfig;

06? import javax.servlet.ServletException;

07? import javax.servlet.ServletRequest;

08? import javax.servlet.ServletResponse;

09? import javax.servlet.http.HttpServletRequest;

10? import javax.servlet.http.HttpServletResponse;

11? /**

12? * 通過Filter過濾器來防SQL注入攻擊

13? * www.2cto.com

14? */

15? public class SQLFilter implements Filter {

16? private String inj_str =

"'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;

|or|-|+|,";

17? protected FilterConfig filterConfig = null;

18? /**

19? * Should a character encoding specified by the client be ignored?

20? */

21? protected boolean ignore = true;

22? public void init(FilterConfig config) throws ServletException {

23? this.filterConfig = config;

24? this.inj_str = filterConfig.getInitParameter("keywords");

25? }

26? public void doFilter(ServletRequest request, ServletResponse response,

27? FilterChain chain) throws IOException, ServletException {

28? HttpServletRequest req = (HttpServletRequest)request;

29? HttpServletResponse res = (HttpServletResponse)response;

30? Iterator values = req.getParameterMap().values().iterator();//獲取所有的表單參數(shù)

31? while(values.hasNext()){

32? String[] value = (String[])values.next();

33? for(int i = 0;i < value.length;i++){

34? if(sql_inj(value[i])){

35? //TODO這里發(fā)現(xiàn)sql注入代碼的業(yè)務(wù)邏輯代碼

36? return;

37? }

38? }

39? }

40? chain.doFilter(request, response);

41? }

42? public boolean sql_inj(String str)

43? {

44? String[] inj_stra=inj_str.split("\\|");

45? for (int i=0 ; i < inj_stra.length ; i++ )

46? {

47? if (str.indexOf(" "+inj_stra[i]+" ")>=0)

48? {

49? return true;

50? }

51? }

52? return false;

53? }

54? }

也可以單獨(dú)在需要防范SQL注入的JavaBean的字段上過濾:

1?? /**

2?? * 防止sql注入

3?? *

4?? * @param sql

5?? * @return

6?? */

7?? public static String TransactSQLInjection(String sql) {

8?? return sql.replaceAll(".*([';]+|(--)+).*", " ");

9?? }

總結(jié)

以上是生活随笔為你收集整理的java防止sql注入的几个途径_Java防止SQL注入的几个途径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。