[英]Using prepared statement for Order by to prevent SQL injection java
[英]How to build query in Java to prevent SQL injection using prepared statement
我需要以防止SQL注入攻擊的可能性的方式構建查詢。
我知道構建查詢的兩種方法。
String query = new StringBuilder("select * from tbl_names where name = '").append(name).append(';).toString();
String query = "select * from tbl_names where name = ? ";
在第一種情況下,我所做的只是一個connection.preparestatement(查詢)
在第二種情況下,我做了類似的事情:
PreparedStatement ps = connection.prepareStatement(query)
ps.setString(1,name);
我想知道什么是行業標准? 您是否使用字符串追加方式來構建查詢,然后准備語句或准備語句並稍后傳遞參數?
您的第一個代碼片段不安全,容易受到SQL注入攻擊。 你不應該使用那個表格。
要使第一個片段安全,您需要手動轉義該值以防止SQL注入。 這很難正確執行,並且選擇錯誤的處理值的方式可能會降低性能,具體取決於底層數據庫(例如,如果為整數列提供字符串文字,某些數據庫系統將不會使用索引)。
第二個片段是標准方式。 它可以保護您免受SQL注入。 使用此表單。
使用帶參數占位符的預准備語句要簡單得多,它還允許您使用不同的值集重用已編譯的語句。 此外,根據數據庫的不同,這可以為跨連接重用查詢計划提供額外的性能優勢。
您也可以使用[OWASP ESAPI library][1]
。 它包括驗證器,編碼器和許多其他有用的東西。 例如,你可以做到
ESAPI.encoder().encodeForSQL(Codec,input);
正在開發更多編解碼器。 目前,支持MySQL和Oracle。 其中一個可能對您的情況有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.