预编译以及为什么预编译可以防止sql注入
预编译什么是预编译?预编译就是做一些代码文本的替换工作,是整个编译过程最先做的事情.比如有一个语句:我可真是太##了!预编译就是对#进行替换,我换成漂亮,则变成:我可真是太漂亮了!其实就是在代码运行之前,对代码进行一些处理.为什么预编译能够防止sql注入?我们先来看一个例子,通俗的理解一下预编译的注入:使用sql拼接:"select * from user where username = ’ "
·
预编译
什么是预编译?
预编译就是做一些代码文本的替换工作,是整个编译过程最先做的事情.
比如有一个语句:
我可真是太##了!
预编译就是对#进行替换,我换成漂亮,则变成:我可真是太漂亮了!
其实就是在代码运行之前,对代码进行一些处理.
为什么预编译能够防止sql注入?
我们先来看一个例子,通俗的理解一下预编译的注入:
使用sql拼接:"select * from user where username = ’ " + name + " ’ ";
页面上可能会有个输入框:用户名:________________________
如果有人这么填:用户名:___hello’; delete from user where id='1__最终的Sql就是
select * from user where name = 'hello';
delete from user where id='1' ";
上面就发生了sql注入,上面的代码变成了查找name为hello的用户,并且删除id=1的用户的记录;这样与代码预期的逻辑就不一致了。
预编译方式能防范sql注入的原理是:在sql参数未注入之前,提前对sql语句进行预编译,后面注入的参数将不会再进行sql编译。即后面注入进来的参数系统将不会认为它会是一条SQL语句,而默认其是一个参数。由此就知道为什么预编译可以防止sql注入了。
更多推荐
已为社区贡献1条内容
所有评论(0)