拼串 (Statement)方式

1、编译次数多,效率比较低;会出现SQL注入问题(数据安全问题):先传参数再编译。

2、Sql文对应的字符串不一样,需要再次编译。Sql文对应的字符串一样,不会再编译,会从缓存中读取以前编译好的文件发送给数据库。

3、SQL注入问题:拼串的时候把特殊的内容(例如or 1=1)拼接到sql文当中,让它符合我们的编译规则,在缓存中正常编译,绕过正常验证机制,查询出不应该查询的内容。

占位符 (Prepared Statement)方式

1、只编译一次,效率比较高;不会出现SQL注入问题(数据安全问题):先编译再传参数。

2、当sql文编译好后,如果添加特殊内容(例如or 1=1),发送到数据库后,数据库无法识别特殊内容(例如or 1=1),所以就不会产生sql注入问题了。

如何防止SQL注入

总的来说有以下几点:

1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。

2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

最新文章

  1. jsonp 实例
  2. vim 使用总结
  3. CLR via C#(14)-可空值类型,关于?和??的故事
  4. POJ2778 DNA Sequence(AC自动机 矩阵)
  5. codeforces 696A Lorenzo Von Matterhorn 水题
  6. Android Mms 接收信息流程
  7. linux RedHat6.4下nginx安装
  8. atomic_compare_exchange
  9. string的不可变性
  10. Django 学习笔记(七)数据库基本操作(增查改删)
  11. 【Aladdin Unity3D Shader编程】之一 基本入门
  12. UWP ListView下模板宽度问题
  13. C#枚举(Enum)小结
  14. POJ2975 Nim 【博弈论】
  15. java编码与解码(一)
  16. 自学Python第一天
  17. java学习之—排序
  18. ASP.NET 登录验证 ihttpmoudle
  19. 三角函数 与 JavaScript
  20. hbase(三)coprocessor

热门文章

  1. Mac ssh 免密码登录 Mac 或者 Linux
  2. python3编译安装no module named _ssl
  3. 微信小程序实现计算器功能
  4. 解决no module named ipykernel_launcher
  5. API接口认证
  6. 微服务SpringCloud无法进行服务消费
  7. 【转】GT 的性能测试方案解析
  8. FortiGate 路由
  9. kafka可视化客户端工具(Kafka Tool)的基本使用
  10. 《笨方法学Python》加分题6