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

时间:2017-08-28 20:15:29

标签: bash sqlite sql-injection

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

#!/bin/bash

SEARCH_PARAM="$1"
SQLITE3_DB="$2"

# 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?类似,但它有固定的字符串参数。

1 个答案:

答案 0 :(得分:1)

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

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

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

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