预编译

什么是预编译?

预编译就是做一些代码文本的替换工作,是整个编译过程最先做的事情.

比如有一个语句:

我可真是太##了!

预编译就是对#进行替换,我换成漂亮,则变成:我可真是太漂亮了!

其实就是在代码运行之前,对代码进行一些处理.

为什么预编译能够防止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注入了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐