java中preparedstatement为什么可以防止sql注入

2022-04-04 科技 91阅读
其实是预编译功能,用preparedstatement就会把sql的结构给数据库预编译。

SQL注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,
动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
对于JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。
如验证用户是否存在的SQL语句为:
selectcount(*)fromusertablewherename='用户名'andpswd='密码'
如果在用户名字段中输入'or'1'='1'or'1'='1
或是在密码字段中输入1'or'1'='1
将绕过验证,但这种手段只对只对Statement有效,对PreparedStatement无效。
PreparedStatement相对Statement有以下优点:
1.防注入攻击
2.多次运行速度快
3.防止数据库缓冲区溢出
4.代码的可读性可维护性好

加油!
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com