當前位置:首頁 » 編程語言 » hibernate拼接sql注入
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hibernate拼接sql注入

發布時間: 2022-05-01 23:10:36

A. hibernate和jdbc是怎麼通過問號防止sql注入的

?的個數和標識位是不確定的,這里屬於B


A、 按參數名稱綁定:

B、 按參數位置邦定:

在HQL查詢語句中用」?」來定義參數位置,形式如下:
Queryquery=session.createQuery(「fromUseruserwhereuser.name=?anser.age=?」);
query.setString(0,name);
query.setInteger(1,age);

同樣使用setXXX()方法設定綁定參數,只不過這時setXXX()方法的第一個參數代表邦定參數在HQL語句中出現的位置編號(由0開始編號),第二個參數仍然代表參數實際值。

註:在實際開發中,提倡使用按名稱邦定命名參數,因為這不但可以提供非常好的程序可讀性,而且也提高了程序的易維護性,因為當查詢參數的位置發生改變時,按名稱邦定名參數的方式中是不需要調整程序代碼的。

C、 setParameter()方法:

D、 setProperties()方法:

B. hibernate能否防止sql注入

很可惜,如果你是組合hql字元串的話,是防止不了的,要防止的話,也要用佔位符,比如
query=session.createQuery("select count(*) from CpUser where id = :id and password = :password");
...
query.setParameter("id".userForm.getId());
...
如果你不想這么做的話,就要自己寫一個filter,自動把所有的request參數值處理一下,如特殊字元前加上\,就不會有注入錯誤了

C. hibernate防止SQL注入的原理是怎麼樣的

不要。 你的sql或者hql,是拼裝的還是prepared傳遞的(?傳遞)。 拼出來的,當然需要防注入了。和你用不用hibernate沒關系

D. 如何防止SQL注入攻擊之java網站安全部署

  • java防SQL注入,最簡單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因為在原有SQL語句中加入了新的邏輯,如果使用PreparedStatement來代替Statement來執行SQL語句,其後只是輸入參數,SQL注入攻擊手段將無效,這是因為PreparedStatement不允許在不同的插入時間改變查詢的邏輯結構,大部分的SQL注入已經擋住了,在WEB層我們可以過濾用戶的輸入來防止SQL注入比如用Filter來過濾全局的表單參數 。下面就舉三個例子來說明一下:

  • 第一種:

    採用預編譯語句集,它內置了處理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);

  • 第三種:

    使用Hibernate框架的SQL注入防範 Hibernate是目前使用最多的ORM框架,在Java Web開發中,很多時候不直接使用JDBC,而使用Hibernate來提高開發效率。

    在Hibernate中,仍然不應該通過拼接HQL的方式,而應使用參數化的方式來防範SQL注入。有兩種方式,一種仍然是使用JDBC一樣的佔位符「?」,但更好的方式是使用Hibernate的命名參數,例如檢測用戶名和密碼是否正確,使用Hibernate可以寫成如下:

    String queryStr = 「from user where username=:username 」+」password=:password」;

    List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();

E. hibernate防止sql 注入,有疑問,求大神指導指導,謝謝

不會的,弄懂SQL注入的原理就知道,SQL注入是通過改變SQL語句的結構來注入,SAVE方法操作的是對象,所以不會有這種問題。

F. java拼接sql怎麼防止注入

使用Hibernate框架的SQL注入防範 Hibernate是目前使用最多的ORM框架,在Java Web開發中,很多時候不直接使用JDBC,而使用Hibernate來提高開發效率。
在Hibernate中,仍然不應該通過拼接HQL的方式,而應使用參數化的方式來防範SQL注入。有兩種方式,一種仍然是使用JDBC一樣的佔位符「?」,但更好的方式是使用Hibernate的命名參數,例如檢測用戶名和密碼是否正確,使用Hibernate可以寫成:
String queryStr = 「from user where username=:username 」+」password=:password」;
List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();

G. 有人遇到過項目中已經使用了hibernate,可是測試的時候依然會被sql注入,請問是怎麼回事呢

需要提供具體調用的代碼,否則無法判斷。
再強大的框架,也不能完全杜絕漏洞,因為框架既要考慮安全性,也要考慮靈活性,資料庫的封閉框架,如果嚴格按照既有的方法生成查詢或寫入語句,一般是不會有注入漏洞的。但個別地方可能需要靈活拼裝查詢或更新語句,傳入了自拼裝的代碼,就很可能導致漏洞產生

H. hibernate的sql注入是什麼意思能解釋透徹一點么

如果在查詢欄位中輸入單引號"'",則會報錯,這是因為輸入的單引號和其他的sql組合在一起編程了一個新的sql,實際上這就是SQL注入漏洞,後來我在前台和後台都對輸入的字元進行了判斷。

永遠也不要寫這樣的代碼:
String queryString = "from Item i where i.description like '" + searchString + "'";
List result = session.createQuery(queryString).list();
如果用戶輸入:foo' and callSomeStoredProcere() and 'bar' = 'bar,則你的程序在執行一個簡單查詢後,還會調用某個存儲過程,
這樣你的程序就開了一個安全漏洞,如果用戶偶爾輸入了一個單引號,你的程序就可能報錯。

I. 現在有個需求,用的是hibernate,需要在hibernate攔截器中對查詢的sql進行where條件拼接

這個寫起來很麻煩,提供解決思路。
1、在web.xml里實現攔截器配置。針對於某一個連接跳轉的。
2、攔截器功能實現,拿到參數。實現需要反射進行實現,同時要保證線程安全。
3、參數處理放到Session里。
4、在實際SQL語句中查詢。

如果跟spring集成的話,建議使用spring的AOP,進行動態代理實現。 進行初期處理。