今天在写 ios 的 sqlite 数据库 CRUD (未用第三方库),找到的文章清一色的对查询参数中的字符串没有任何处理就拼到了 sql 语句里面,就直接调用了 sqlite3_prepare 函数执行。如果字符串里面出现了'字符,就算不是恶意输入的,但也会导致问题呀。Android 稍微好点,有参数化那种查询。
于是产生了这个疑问:在仅支持自己构造完整 sql 语句执行的情况下,把用户输入的一个字符串里面的'换成了''拼接到 sql 语句里面,新版、现代、主流的关系型数据库是否还有可能被这个字符串注入?
不限于后端这个重点防范的地方,前端 js、Android、ios 等能接触到数据库的地方都应该会产生此问题吧。
假设用的开发语言、数据库都是当前最新版。比如伪代码:
name=UserInput("name").replace("'","''")
sql="select * from table where name='"+name+"'"
db_exec(sql)