Java防止SQL注入

SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法

用户钻了SQL的空子,下面我们先来看下什么是SQL注入:

比如在一个登陆界面,要求用户输入用户名和密码:

用户名:       ' or 1=1 --

密       码:

点登陆,如若没有做特殊处理,而只是一条带条件的查询语句如:

String sql="select * from users where username='"+userName+"' and password='"+password+"' "

那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题)

这是为什么呢?我们来看看这条语句,将用户输入的数据替换后得到这样一条语句:

select * from users where username='' or 1=1 --' and password=''

为了更明白些,可以将其复制到SQL分析器中,将会发现,这条语句会将数据库的数据全部读出来,为什么呢?

很简单,看到条件后面 username='' or 1=1 用户名等于 '' 或 1=1 那么这个条件一定会成功,然后后面加两个-,这意味着

什么?没错,注释,它将后面的语句注释,让他们不起作用,这样就可以顺利的把数据库中的数据读取出来了。

这还是比较温柔的,如果是执行

select * from users where username='' ;DROP Database      (DB Name) --' and password=''

.......其他的您可以自己想象。。。

那么我们怎么来处理这种

相关文档:

数学函数:

1.绝对值

S:SELECT abs(-1) value
O:SELECT abs(-1) value from dual

2.取整(大)

S:SELECT ceiling(-1.001) value
O:SELECT ceil(-1.001) value from dual

3.取整(小)

S:SELECT floor(-1.001) value
O:SELECT floor(-1.001) value from dual

4.取整(截取)

S:SELECT cast(-1.002 as int) value
O ......

SQL Server DATEDIFF() 函数

定义和用法

DATEDIFF() 函数返回两个日期之间的天数。

语法

DATEDIFF(datepart,startdate,enddate)

startdate 和 enddate 参数是合法的日期表达式。

datepart 参数可以是下列的值:

datepart缩写
年
yy, yyyy
季度
qq, q
月
mm, m
年中的日
dy, y
日
dd, d
周
wk, ww
星期 ......

SQL Server Extended Events(下面简称XEvent)是SQL Server 2008里新加的事件处理系统,用来取代SQL Server原

先的SQL Trace的跟踪机制。事件处理系统对一个复杂服务器系统的排错,调试是极为关键的。和SQL Server原来的事

件处理系统相比较,XEvent具有下列的优势:

消耗更少的系统资源,更适用于在产品服务器上的 ......

一.视图(VIEW)

定义:视图是一张虚拟的表,其内容是从一张或多张表中查询得来的结果集。

描述:视图是存储在系统目录中的信息,她并没有真正存储数据,而是已存表的投影。视图的属性是按照一个查询的规定从一个或者多个表中导出的,是已存表的过滤器。她是一张“虚表”,从一张表或者多张表中派生出来的,其 ......