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. 比较牛X的网站

    数学公式编辑与分享网站:https://www.mathcha.io/editor Markdown编辑网站:https://note.youdao.com/web 在线LaTex公式编辑器:http ...

  2. python中解方程

    from sympy import * import numpy as np from numpy import linalg # 方程中的符号 x = Symbol('x') # 计算 result ...

  3. 【网摘自CSDN网站】当文本内容过多,展开更多 (css控制,)

    <div class="more"><p class="btn">显示全部内容</p></div> .more ...

  4. jqgrid自适应宽度

    https://blog.csdn.net/duzhanxiaosa/article/details/78922660

  5. 【快学Docker】Docker镜像相关操作

    前言 镜像是Docker的三大核心概念之一(另外两个分别是:容器和仓库). Docker运行容器前需要本地存在镜像,如果本地不存在镜像,Docker则会尝试从远端仓库拉去镜像.镜像是Docker一大核 ...

  6. Lucene学习笔记一

    Lucene课件 1.全文检索 1.1常见的全文检索 在window系统中,可以指定磁盘中的某一个位置来搜索你想要得到的东西.这个功能是windows比较常用的功能.在这个界面中能搜索的内容有*.*, ...

  7. BZOJ 4167: 永远的竹笋采摘

    首先同BZOJ5052 \(O(n \log n \log v)\) 求出所有点对 现在变成选出 \(k\) 条不相交的线段使得权值最小 可用前缀min优化dp \(O(nk)\) 解决 还是太慢,考 ...

  8. Java基础 -4.5

    循环控制 在循环语句定义的时候还有两个控制语句:break.continue break主要的功能是退出整个循环结构 continue严格来讲只是结束当前的一次调用(结束当前循环) 当执行到了cont ...

  9. Java基础 -2.4

    字符型char类型 在任何的编程语言之中,字符都可以与int进行互相转换,也就是这个字符中所描述的内容可以通过int获取其内容所在的系统编码 public class ddd { public sta ...

  10. 转--Spring MVC : Java模板引擎 Thymeleaf (三)

    原文:http://www.csdn.com/html/topnews201408/49/1349.htm 下面以构造一个表单开始,讲解 Thymeleaf的用法.为了演示方便,还是以经典的注册为例. ...