在构建 sql 查询和更新以提交到我的数据库之前,我需要清理一些用户输入的数据。
我知道最好使用准备好的语句,但这不是一个选项。不幸的是,我坚持要转义所有用户提供的 Input。
看起来 Postgres JDBC 库附带了一个工具来进行字符串转义。见org.postgresql.core.Utils.escapeLiteral(..)(见下文)。我希望因为 Postgres 附带了它,所以使用起来是安全的。经过几个小时的谷歌搜索和查看 SQL 备忘单后,我无法找到一个可以打破这个的例子。
以下看起来足够安全吗?
public class FruitDb {
private Connection connection;
public void findFruit ( String /* user enterable field */ fruitColor ) {
String query = "SELECT * FROM fruit WHERE fruit_color = " + quote( fruitColor );
Statement statement = connection.createStatement();
statement.executeQuery( sql );
}
private String quote( String toQuote ) {
return "'" + Utils.escapeLiteral( null, s, true ).toString() + "'"; …Run Code Online (Sandbox Code Playgroud)