[程序员]这是一张只有程序员才能看懂的图片( 二 )


①车牌号
也就是类似于用户名的存在 。
②DROP DATABASE TABLICE
这是在一件什么事情?在删除数据库 。
③也是用的sql中的“--” , 将后面的数据都注释掉了 。
也就是说 , 摄像头拍到了这辆车 , 会记下其车牌号登录 , 同时删除自己的数据库 。
这样的一种行为就是sql注入 。
简单地理解也就是:
用户在提交数据时人为地添加一些特殊字符 , 使得sql语句的结构发生了变化 。
最终可以在没有用户名或者密码的情况下进行登录 , 同时也可以完成恶意攻击 。
当然这张图片只是一个笑话啦 。

  • 首先你并不知道交通部门的数据库名叫啥 。
  • 其次交通部门也有程序员 , 肯定会想到防范措施 。
  • 最后这样做一旦被发现 , 是要被直接吊销驾照的 。
那该如何防范呢?就是使用预编译 。
三、预编译预编译、顾名思义也就是预先编译 , 代码如下:
①占位符
?是一个占位符 , 表示所在的位置是一个参数 。
它有一个非常强大的作用在于 , 占位符里的参数 , 必然会是普通字符串 。 什么意思呢?
我们以前学过转义字符 。
本来“--”在sql中是注释的意思 , 但是通过占位符将其转义成一个普通的字符了 , 不具有注释的作用了 。
②预编译
预编译等于是将sql语句提前了 , 先编译再设置参数 。
以前执行sql语句是在调用executeQuery()方法时 。
其中PreparedStatement是Statement的一个子接口 。
prepared , 也就是准备、预先的意思 。
③参数索引
setString()方法就是给占位符赋具体的值 。
参数表示的是sql语句中“?”占位符的索引:
  • 1表示的第一个问号是name;
  • 2表示的是第二个问号表示的是pwd 。
其中索引从左开始从1开始数起 。
以上便是对sql注入以及其防范措施预编译的说明 。
预编译能防范sql注入 , 效率还高 , 很是实用 。
最后谢谢你的观看 。
如果可以的话 , 麻烦帮忙点个赞 , 谢谢你 。


推荐阅读