今天在写 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)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.