1.什么是SQL注入

答:SQL注入是通过把SQL命令插入到web表单提交或通过页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL指令。

  注入攻击的本质是把用户输入的数据当做代码执行。

  举例如: 表单有两个用户需要填写的表单数据,用户名和密码,如果用户输入admin(用户名),111(密码),若数据库中存在此用户则登录成功。SQL大概是这样

      SELECT * FROM XXX WHERE userName = admin and password = 111

     但若是遭到了SQL注入,输入的数据变为  admin or 1 =1 # 密码随便输入,这时候就直接登录了,SQL大概是这样

      SELECT * FROM XXX WHERE userName = admin or 1 = 1 # and password = 111 ,因为 # 在sql语句中是注释,将后面密码的验证去掉了,而前面的条件中1 = 1始终成立,所以不管密码正确与否,都能登录成功。

2.mybatis中的#{} 为什么能防止sql注入,${}不能防止sql注入

答: #{}在mybatis中的底层是运用了PreparedStatement 预编译,传入的参数会以 ? 形式显示,因为sql的输入只有在sql编译的时候起作用,当sql预编译完后,传入的参数就仅仅是参数,不会参与sql语句的生成,而${}则没有使用预编译,传入的参数直接和sql进行拼接,由此会产生sql注入的漏洞。

最新文章

  1. Myeclipse下的struts2.3.8 配置 保证绝对好用
  2. supervisor-2:event
  3. 51nod 算法马拉松18 A 染色问题
  4. 基于mybatis-generator-core 1.3.5项目的修订版以及源码剖析
  5. redis 的源码编译安装
  6. AJAX原理及应用
  7. jquery function Optional Arguments
  8. spring事务管理-摘抄
  9. Cocos2d-x学习之windows 7的visual studo 2010开发环境安装
  10. 十六进制string转换UIColor -备用
  11. linux下启动和关闭网卡命令及DHCP上网
  12. Windows创建的基本含义和进程的进程的内核
  13. CentOS7.4下的 JDK1.8 安装
  14. xstream实现对象的序列化和反序列化(Java)
  15. webview 向右滑动关闭时,怎么禁止此 webview 上下滚动?
  16. 一步步使用Code::Blocks进行设置断点调试程序
  17. Python面向对象编程 - 一个记事本程序范例(二)
  18. 高级类特性----static关键字
  19. 《码农周刊》干货精选--Python篇(转)
  20. HNOI 2014

热门文章

  1. CSS波纹动画
  2. C# socket异步 服务端
  3. react 引入swiper
  4. 需求-java web 能够实现整个文件夹的上传下载吗?
  5. 分块查找(Blocking Search)
  6. mysql内存分配问题
  7. Linux命令-文件管理(一)
  8. HTML5 localStorage setItem getItem removeItem
  9. ES6 变量的结构赋值用途(实用技巧)
  10. Android Studio安装Unable to access Android SDK add-on list处理方法