如何在 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 实现可能有其他需要转义的字符。)
我现在有一个脚本可以归结为:
#!/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 实现可能有其他需要转义的字符。)