易截截图软件、单文件、免安装、纯绿色、仅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语句中 N 后接续字符串的作用

如:SET @sql=N'SELECT * from stu'
其中“N”的作用是表示后面的编码格式为unicode编码
DECLARE @rst INT,@sql NVARCHAR(4000)
SET @sql=N'SELECT * from tb '
EXEC sp_executesql @sql,N'@rst INT OUTPUT',@rst OUTPUT
SELECT @rst
......

SQL语句得到存储过程关联哪些表名

SELECT DISTINCT '['+user_name(b.uid)+'].['+b.name+']' AS 对象名,b.type AS 类型
from sysdepends a,sysobjects b
WHERE b.id=a.depid
    AND a.id=OBJECT_ID('过程名');
 
 
EXEC SP_DEPENDS '过程名'; ......

sql完全解析

1、简单查询
求出在1988年以前被雇佣的销售人员
SELECT NAME
 from SALESREPS
WHERE HIRE_DATE<'01-JAN-88'
列出其销售量低于销售目标的80%的销售点
SELECT CITY,SALES,TAGET
from SALESPEPS
WHERE SALES<0.8*TAGET ......

【转】 PL/SQL最差实践

PL/SQL最差实践
http://benben.javaeye.com/blog/278164
1. 超长的PL/SQL代码
           影响:可维护性,性能
           症状:
            在复 ......

sql server 自定义split(分割)函数

ALTER function [dbo].[split]
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
returns @temp table(F1 varchar(100))
as
begin
declare @i int
set @SourceSql = rtrim(ltrim(@SourceSql))
set @i = charindex(@StrSeprate,@SourceSql)
while @i >= 1
begin
if len( ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号