Martin Fowler在他的书 企业应用程序架构模式 中说
一个好的经验法则是避免将字符串连接放在一起 SQL查询
我经常使用这种做法,从查询的真实data
中抽象出我的SQL查询的语法。
你能解释一下为什么这被认为是一种不好的做法吗?
答案 0 :(得分:8)
虽然在编译之前可能存在使用字符串连接构建预准备语句的用例,但使用字符串连接插入查询参数总是不好的做法有两个原因:
安全性:对用户提供的数据使用字符串连接总是容易发生SQL注入攻击。假设你有一个声明:
query = "select secret_data from users where userid = '" + userid_param + "'";
想象有人发送userid_param
包含"' OR 1=1;"
...
这样,防守的唯一方法就是100%正确的输入卫生,根据使用的语言,可能很难做到正确。当使用带有正确实现的驱动程序的预准备语句时,驱动程序将从查询参数中隔离语句,这样就不会混淆任何内容。