簡體   English   中英

EJB3 SQL注入

[英]EJB3 SQL Injection

我想知道EJB3防止SQL注入的安全性。
我已經讀過,使用預處理語句非常安全,但是例如使用這樣的函數

@Override
public Collection<Project> searchProjectsPerProfessorLastname(String lastname) {
    Query q = manager.createQuery("SELECT DISTINCT OBJECT(p) FROM Project p JOIN p.professors prof WHERE lower(prof.lastName) = ?1");
    q.setParameter(1, lastname.toLowerCase());
    @SuppressWarnings("unchecked")
    Collection<Project> c = q.getResultList();
    if(c.size()==0)
       return null;
    return c;
}

有可能執行SQL注入?

沒有。

簡而言之,只要您不動態構建SQL(綁定也不構建SQL),就不會有SQL注入的風險。 除非存在錯誤的SQL驅動程序。

綁定是通過驅動程序而不是僅通過自己構建SQL文本為SQL語句分配參數的技術。

不同的驅動程序會做不同的事情,但是發生SQL注入的原因是,創建SQL文本的人沒有采取適當的預防措施來防止SQL注入(特別是轉義引號等特殊字符)。

理想情況下,驅動程序會注意正確構建SQL。 但是,如果驅動程序在某些方面存在問題,則仍然存在一定的風險。 我個人沒有遇到驅動程序有錯誤影響此錯誤。 因此,盡管有可能,但它確實非常遙遠。

最后,例如,您甚至沒有使用SQL,而是使用EQL,這是JPA查詢語言。 必須再次將其從EQL轉換為SQL,這為中間軟件(JPA和JDBC驅動程序)提供了更多機會來防止發生SQL注入。

所有JPA調用的參數化查詢形式都被認為可以防止SQL注入。 但是,您可以使用串聯創建查詢字符串,這是不安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM