关于 SQL 注入的问题
2024-10-02 18:30:41
拼串 (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.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。
最新文章
- jsonp 实例
- vim 使用总结
- CLR via C#(14)-可空值类型,关于?和??的故事
- POJ2778 DNA Sequence(AC自动机 矩阵)
- codeforces 696A Lorenzo Von Matterhorn 水题
- Android Mms 接收信息流程
- linux RedHat6.4下nginx安装
- atomic_compare_exchange
- string的不可变性
- Django 学习笔记(七)数据库基本操作(增查改删)
- 【Aladdin Unity3D Shader编程】之一 基本入门
- UWP ListView下模板宽度问题
- C#枚举(Enum)小结
- POJ2975 Nim 【博弈论】
- java编码与解码(一)
- 自学Python第一天
- java学习之—排序
- ASP.NET 登录验证 ihttpmoudle
- 三角函数 与 JavaScript
- hbase(三)coprocessor