易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL 注入




SQL注入就不用介绍了,网上很多。下面介绍一下防止
SQL注入的方法。
使用
quotename 函数和
sp_executesql
参考如
下表结构:这是一个文档表里面有一些简单的字段信息
CREATE
TABLE
[dbo]
.
[DocumentInfo]
(
    [ID]
[int]
IDENTITY
(
1,
1) primary key
 NOT
NULL,--
主键
    [Name]
[varchar]
(
100)
NOT
NULL,--
文档名字
    [FunctionID]
[int]
NOT
NULL

--
功能
ID
外键
    [TypeInfo]
[nvarchar]
(
2000)
NULL—
描述信息

我们可能会按,主键
ID,文档的名字,功能
id,
描述信息进行查询
,这个一看就是拼接
sql语句,如果不用上面的方法很可能造成
sql注入
例如你写的存储过程可能如下:
CREATE

proc
 [dbo]
.
[Doc_search]
(
@ID
int
,
@name
varchar
(
10),
@FID
int
,
@Info
nvarchar
(
20)
)
as
begin

declare
@sql
varchar
(
300)
set
@sql
=
'select * from
[DocumentInfo] where 1=1'
if
@ID
<>-
1
set
@sql
=
@sql
+
' and ID='
+
CAST
(
@ID
as
varchar
)
if
@name
<>
''
set
@sql
=
@sql
+
' and name='''
+
CAST
(
@name
as
varchar
)
+
''''
if
@FID
<>-
1
set
@sql
=
@sql
+
' and
[FunctionID]='
+
CAST
(
@FID
as
varchar
)
if
@Info
<>
''
set
@sql
=
@sql
+
' and [TypeInfo] like ''%'
+
CAST
(
@Info
as
varchar
)+
'%'''
print
@sql
end
exec
(
@sql
)
虽然你用了带参数的存储过程
,但本质上还是拼接字符串,没有有效的防治
sql注入。现在
分别用
quotename()函数和
sp_executesql。
Quotename()函数不知道用的请自行查找,
sp_executesql的用法
见上一篇动态
sql
Quotename改进如下:
alter
proc
 [dbo]
.
[Doc_search]
(
@ID
int
,
@name
varchar
(
10),
@FID
int
,
@Info
nvarchar
(
20)
)
as
begin

declare
@sql
varchar
(
300)
set
@sql
=
'select * from
[DocumentInfo] where 1=1'
if
@ID
<>-
1
set
@sql
=
@sql
+
' and ID='
+
CAST
(
@ID
as
varchar
)


相关文档:

移植SQL server数据库对象到Oracle的操作说明

以下是摘自Oracle官网:
Ⅰ Oracle SQL Developer 是一个免费的图形化数据库开发工具。使用 SQL Developer,您可以浏览数据库对象、运行 SQL 语句和 SQL 脚本,并且还可以编辑和调试 PL/SQL 语句。您还可以运行所提供的任何数量的报表,以及创建和保存您自己的报表。SQL Developer 可以提高工作效率并简化数据库开发任务。 ......

SQL小短句收集

Select TOP N * from TABLE Order By NewID() 
--Access:
Select TOP N * from TABLE Order By Rnd(ID)  
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName) 
Selec ......

[SQL]触发器的使用

1. 创建触发器, 在mssql下的触发器的使用:Db->表->选择表名->所有任务(右键)->管理触发器
2. 当表被更新\插入\删除后,都可以通过定义触发器来响应该事件,从而进行相应的处理! 如一个学生转系了,其学号被更换了,他所借的图书对应的学号也相应需要改动,这个我们可以只通过update其学号,和学号相关联的表由触发器 ......

50条常用sql语句

注:出处已不可考,不过,其中不少语句还是蛮精妙的。
Student(S#(学号),Sname(姓名),Sage(年龄),Ssex(性别)) 学生表
Course(C#(课程编号),Cname(课程名称),T#(老师编号)) 课程表
SC(S#(学号),C#(课程编号),score(分数)) 成绩表
Teacher(T#(老师编号),TnameSname(姓名)) 教师表
问题:
1、查询“001” ......

簡單SQL存儲過程實例

实例1:只返回单一记录集的存储过程。
银行存款表(bankMoney)的内容如下
Id
userID
Sex
Money
001
Zhangsan

30
002
Wangwu

50
003
Zhangsan

40
要求1:查询表bankMoney的内容的存储过程
create procedure sp_query_bankMoney
as
select * from bankMoney
go
exec sp_query_bankMoney
注 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号