0
点赞
收藏
分享

微信扫一扫

使用PrepareStatement执行SQL的好处

夏天的枫_ 2022-01-22 阅读 91

主要有两个好处:

一是PrepareStatement会预先提交带占位符的SQL到数据库进行预处理,提前生成执行计划。当给定占位符参数真正执行SQL时,执行引擎可以直接执行,效率更高一点。

另一个好处则更为重要,PrepareStatement可以防止SQL注人攻击。

假设我们允许用户通过App输人一个名字到数据中心查找用户信息,如果用户输人的字符串是Frank,那么生成的SQL如下:

select from users where username = 'Frank';

但是,如果用户输入的是下面的字符串:Frank';drop table users;--
那么生成的SQL如下:

select from users where username = 'Frank';drop table users;--';

这条SQL提交到数据库以后,会被当作两条SQL执行:一条是正常的select查询SQL,另一条是删除users表的SQL。如果黑客提交一个请求,然后users表被删除,系统崩溃了,这就是SQL注人攻击。如果用Statement提交SQL就会出现这种情况。

但如果使用PrepareStatement则可以避免SQL被注人攻击。因为开始构造PrepareStatement的时候就已经提交了查询SQL,并被数据库预先生成了执行计划,后面不管黑客提交什么样的字符串,都只能交给这个执行计划去执行,不可能再生成一个新的SQL,自然也就不会被攻击了。

select from users where username = ?
举报

相关推荐

0 条评论