SQL中的安全问题
    1.SQL注入
        demo1:
            SELECT * FROM user WHERE username = ? AND password = ? ;
            
            http://127.0.0.1/injection/user.do?username=angel' or '1=1
            http://127.0.0.1/injection/user.do?username=angel'/*
            http://127.0.0.1/injection/user.do?username=angel'#
    
            其中 or 1=1 保证sql为真;而 /* 以及 # 会将后面的SQL注释掉,使得SQL也为真,导致SQL没有起到需要密码的目的,将数据返回.
 
            
    2.开发时,防止SQL注入
        a.使用Java , JSP进行开发时,应采用PrepareStatement + Bind-variable方式防止SQL注入.
        尽量不要使用拼接SQL的方式.
            demo :
                ...
                String sql = "SELECT * FROM users u where u.id = ? and u.password = ?";
                PrepareStatement ps = connection.prepareStatement(sql);
                ps.setInt(1,id);
                ps.setString(2.pwd);
                ResultSet rs = ps.executeQuery();
                ...
 
        b,使用应用程序提供的转换函数
        
                略,这里没有提到 java 相关的api .
 
        c.自定义函数 进行校验
                输入验证的途径可以分为以下几种:
                    整理数据使之变得有效;
                    拒绝已知的非法输入;
                    只接受已知的合法输入;
            
                目前最好的办法就是对用户提交或者可能改变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验证.
 
                已知非法的字符有 :
                    '  ,   ;  ,  =  , (  ,  ) ,  /*  ,  */  ,  %  ,  +  ,  空字符串  ,  >  ,  <   , --  ,  [  ,  ]
 
                同时要过滤它们的十六进制表示"%XX",由此可以构造如下正则表达式:
                    (|\'|(\%27)|\;|(\%3b)|\=|(\%3d)|\(|(\%28)|\)|(\%29)|(\/*)|(\%2f%2a)|(\*/)|(\%2a%2f)|\+|(\%2b)|\<|(\%3c)|\>|(\%3e)|\(--))|\[|\%5b|\]|\%5d)
 
 
            
 
     

15 SQL中的安全问题的更多相关文章

  1. 15.Mysql中的安全问题

    15.SQL中的安全问题15.1 SQL注入简介SQL是用来和数据库交互的文本语言.SQL注入(SQL Injection)是利用数据库的外部接口将用户数据插入到实际的SQL中,以达到入侵数据库乃至操 ...

  2. MySQL SQL中的安全问题

    一.SQL注入是一个很常见的问题:利用的原理是SQL语句中的 "or"操作符或者"/*"和"#"注释符.前者利用逻辑运算,或者利用MySQL ...

  3. MySQL开发篇(5)索引、视图、触发器、SQL中的安全问题、SQL Mode、

    一.索引 所有MySQL列类型都可以被索引,对相关列使用索引是提高SELECT操作性能的最佳途径.每种存储引擎(MyISAM.InnoDB.BDB.MEMORY等)对每个表至少支持16个索引,总索引长 ...

  4. sql 中convert和cast区别

    SQL中的cast和convert的用法和区别 更多 来源:SQL学习浏览量: 学习标签: cast convert sql 本文导读:SQL中的cast 和convert都是用来将一种数据类型的表达 ...

  5. 在SQL中使用CLR提供基本函数对二进制数据进行解析与构造

      二进制数据包的解析一般是借助C#等语言,在通讯程序中解析后形成字段,再统一单笔或者批量(表类型参数)提交至数据库,在通讯程序中,存在BINARY到struct再到table的转换. 现借助CLR提 ...

  6. 转-sql中的case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  7. SQL 中数值型数据截取以及四舍五入

    SQL 中数值型数据截取及四舍五入 例一: -- 将两个数值分别截取只保留两位小数 ( 注意此时字段默认为 decimal ) select CAST ( 10.097 as decimal ( 10 ...

  8. SQL中的5种聚集函数

    作为一个刚毕业进入这行的菜鸟,婶婶的觉的那种大神.大牛到底是怎样炼成的啊,我这小菜鸟感觉这TMD要学的东西这多啊,然后就给自己定了许多许多要学习的东西,可是有人又不停地给你灌输:东西不在多而要精通!我 ...

  9. oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

随机推荐

  1. CentOS7 安装 OpenCV 的一些问题解决办法

    由于强迫症,实在受不了root权限的旧gcc才能使用boost而普通权限却是最新版gcc,经过一番折腾后,终于把配置全部弄好了,实际上就只需要把新版gcc的各个文件放到系统找到旧gcc的地方,并建立新 ...

  2. apache、mysql、php核心、phpmyadmin的安装及相互关联

    1.apache的安装 https://blog.csdn.net/ashendove/article/details/52206198 里面的serverName  就是你在服务中 设置的apach ...

  3. MYSQL优化考虑十个方面

    1)索引 2)sql优化 3)锁 4)延迟 5)参数优化 6)连接数 7)cpu 8)iops 9)磁盘 10)内存

  4. linux文件的查找和检索

    1)按文件属性查找 1)文件名: find  +  查找的目录  +   -name  +  "文件名" 文件名中可以使用通配符:*号表示多个,?号表示一个 2)文件大小: fin ...

  5. 《Interest Rate Risk Modeling》阅读笔记——第八章:基于 LIBOR 模型用互换和利率期权进行对冲

    目录 第八章:基于 LIBOR 模型用互换和利率期权进行对冲 思维导图 推导浮息债在重置日(reset date)的价格 第八章:基于 LIBOR 模型用互换和利率期权进行对冲 思维导图 推导浮息债在 ...

  6. jquery 判定checkbox是否选中

    CheckBox 判定是否选中 使用 attr('checked')来做判别是不行的,除非所有的选中取消都是使用这个属性来处理. 正确的做法是使用 .prop('checked') 来判定.

  7. 已知空间两点组成的直线求线上某点的Z值

    已知空间两点组成的直线求线上某点的Z值,为什么会有这种看起来比较奇怪的求值需求呢?因为真正三维空间的几何计算是比较麻烦的,很多时候需要投影到二维,再反推到三维空间上去. 复习下空间直线方程:已知空间上 ...

  8. android的ListAdapter简单用法

    ListAdapter是一个整个Activity有且仅有一个ListView控件的Activity 使用步骤:1. 创建MyListViewAdapter(类名可以自定义) extends ListA ...

  9. @override编译报错

    今天突然遇到一个问题,明明我重写的接口的方法,编译的时候一直报@override is not override a method from superclass,查了一下资料,这个@override ...

  10. day8 文件的读取

    只读 只写 追加 读写 功能 username = input('请输入你要注册的用户名:') password = input('请输入你要注册的密码:') with open('list_of_i ...