没有预处理语句/ SQLite / C防止SQL注入

前端之家收集整理的这篇文章主要介绍了没有预处理语句/ SQLite / C防止SQL注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很感激有关这个方案对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注入攻击吗?并且“准备好的声明”实际上比上述方案更重要吗?

解决方法

基本上,你唯一需要担心的是单引号.查询中单引号中包含的任何内容都可以,但单个引号可以结束字符串,允许其余数据条目作为代码运行.如果sqlPrintf加倍单引号,你应该没问题.阅读你的问题的评论,听起来这个系统反对“’; – ”攻击.

猜你在找的Sqlite相关文章