如何在 bash 中转义 sqlite3 查询参数?

How can I escape sqlite3 query parameters in bash?

我现在有一个脚本可以归结为:

#!/bin/bash

SEARCH_PARAM=""
SQLITE3_DB=""

# Don't inject me please :(
sqlite3 "$SQLITE3_DB" "SELECT foo FROM Bar WHERE bundleId='$SEARCH_PARAM';"

一个明显的问题是 $SEARCH_PARAM 值很容易受到 SQL 注入。我可以从 bash 脚本中解决这个问题,还是我需要加入另一种脚本语言,如 Python,才能访问查询参数?

How can I escape characters in SQLite via bash shell? 类似,但它有固定的字符串参数。

在 SQL 字符串中,唯一需要转义的字符是单引号,必须双引号。

这可以通过在参数扩展中使用模式替换来完成:

sqlite3 "..." "... bundleId = '${SEARCH_PARAM//\'/\'\'}';"

(像 MySQL 这样的非标准 SQL 实现可能有其他需要转义的字符。)