我很感激有关这个方案对sql注入攻击的安全性的一些反馈.
在前端,用户输入个人信息:姓名,地址,电话号码,电子邮件和一些自由格式文本.
后端在C中从头开始编码,没有框架支持,并集成了sqlite.
C代码不使用sqlite预处理语句(由于历史原因,对它做任何事情都为时已晚).相反,所有sql语句都构造为printf样式的格式字符串,沿着这些方向:
#define STATEMENT_N "UPDATE members SET FirstName='%s',Surname='%s',DOB='%s',etc"
实际语句是使用手动编码的sprintf(sqlPrintf)语句创建的,该语句仅处理%s,%c和%d转换.然后创建最终语句,如:
sqlPrintf(query_buffer,STATEMENT_N,user_str_1,user_str_2,etc)
因此,换句话说(如果您不熟悉C / sprintf),用户输入将“打印”到%s,%c和%d中. sqlPrintf中唯一不明显的处理是用户提供的单引号字符被转义(它们被加倍).
这足以防止sql注入攻击吗?并且“准备好的声明”实际上比上述方案更重要吗?