[英]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.