加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 18:52:36 所属栏目:百科 来源:网络整理
导读:我很感激有关这个方案对SQL注入攻击的安全性的一些反馈. 在前端,用户输入个人信息:姓名,地址,电话号码,电子邮件和一些自由格式文本. 后端在C中从头开始编码,没有框架支持,并集成了SQLite. C代码不使用SQLite预处理语句(由于历史原因,对它做任何事情都为时已
我很感激有关这个方案对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加倍单引号,你应该没问题.阅读你的问题的评论,听起来这个系统反对“’; – ”攻击.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读