我现在有一个可以归结为此脚本的脚本:
#!/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?类似,但它有固定的字符串参数。
答案 0 :(得分:1)
在SQL字符串中,唯一需要转义的字符是单引号,必须加倍。
这可以通过在参数扩展中使用模式替换来完成:
sqlite3 "..." "... bundleId = '${SEARCH_PARAM//\'/\'\'}';"
(像MySQL这样的非标准SQL实现可能还有其他需要转义的字符。)