2 回答

TA貢獻1842條經(jīng)驗 獲得超21個贊
簡單(而且不安全?。┑姆椒ㄊ沁@樣的:
// package declaration
// imports
public class Main {
public static void main(String[] args) {
if (args.length >= 1) {
String query = "select FOO from BLAH a where a.BAZ = '"
+ args[0] + "'";
Connection connection = ...
Statement statement = connection.createStatement();
ResultSet rs = statement.execute(query);
// etcetera
} else {
// report missing command line argument.
}
}
}
問題是通過字符串連接組裝 SQL 查詢?nèi)菀资艿絊QL 注入攻擊。特別是當(dāng)某些“參數(shù)”可能來自不可信的來源時。
因此,更好(更安全)的方法是使用PreparedStatement, 及其語法安全的參數(shù)替換機制:
// package declaration
// imports
public class Main {
public static void main(String[] args) {
if (args.length >= 1) {
String query = "select FOO from BLAH a where a.BAZ = ?";
Connection connection = ...
PreparedStatement statement = connection.createPreparedStatement(query);
statement.setString(1, args[0]);
ResultSet rs = statement.execute();
// etcetera
} else {
// report missing command line argument.
}
}
}

TA貢獻1798條經(jīng)驗 獲得超7個贊
如果您從終端執(zhí)行命令,則該語句應(yīng)傳遞到 main 方法的 String[] args 參數(shù)中的代碼中,您應(yīng)該能夠從中在代碼中引用它。
添加回答
舉報