[英]How to protect yourself against SQL Injection in dynamic queries?
我的應用程序獲取到數據庫的字符串 object 查詢。 例如String query = EMAIL like '% test%' and USER_NAME like '% user%'
。 查詢是動態構建的,我不知道它的結構,所以我不能利用PrepareStatement
。 有誰知道在這種情況下防止 SQL 注入的方法?
數據庫:Oracle
語言:Java 1.6
請幫忙。
即使您不知道結構,也可以使用PreparedStatement
。 讓我用一個簡單的例子來演示:
List<Object> arguments = new ArrayList<Object>();
String sql = "SELECT * FROM user WHERE someCondition = ?";
if (queryOnEmail) {
sql = sql + " AND email LIKE ?";
arguments.add(email);
}
if (queryOnUserName) {
sql = sql + " AND user_name LIKE ?";
arguments.add(userName);
}
PreparedStatement stmt = con.prepareStatement(sql);
int i = 1;
for(Object o : arguments) {
stmt.setObject(i, o);
i++;
}
當然,您可以將這個 SQL + arguments 結構包裝到它自己的 class 中以簡化其使用。
您可以在構建查詢和使用 PreparedStatement 時為語句動態構建變量列表。
另外:永遠不要相信用戶的輸入總是好的做法。 在處理任何輸入數據之前,首先刪除所有轉義字符和特殊字符: String.replace("\\" | "\"", "");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.