SQL Injection:网络攻击及其防范措施(5)

string queryString = Request.QueryString[jobId]; if (!string.IsNullOrEmpty(queryString)) if (!DetectSqlInjection(queryString) !DetectSqlInjection(queryString)) // Gets data from database. gdvData.Dat

string queryString = Request.QueryString["jobId"];

if (!string.IsNullOrEmpty(queryString))

if (!DetectSqlInjection(queryString) && !DetectSqlInjection(queryString))

// Gets data from database.

gdvData.DataSource = GetData(queryString.Trim());

// Binds data to gridview.

gdvData.DataBind();

else

  throw new Exception("Please enter correct field");

当我们再次执行以下URL时,被嵌入的恶意语句被校验出来了,从而在一定程度上防止了SQL Injection。

http://localhost:3452/ExcelUsingXSLT/Default.aspx?jobid=1"or"1"="1

图6 添加校验查询结果

 

图6 添加校验查询结果

但使用正则表达式只能防范一些常见或已知SQL Injection方式,而且每当发现有新的攻击方式时,都要对正则表达式进行修改,这可是吃力不讨好的工作。

通过参数化存储过程进行数据查询存取

首先我们定义一个存储过程根据jobId来查找jobs表中的数据。

=============================================

Author: JKhuang

Create date: 12/31/2011

Description: Get data from jobs table by specified jobId.

=============================================

ALTER PROCEDURE [dbo].[GetJobs]

ensure that the id type is int

@jobId INT

AS

BEGIN

SET NOCOUNT ON;

SELECT job_id, job_desc, min_lvl, max_lvl

FROM dbo.jobs

WHERE job_id = @jobId

GRANT EXECUTE ON GetJobs TO pubs

(责任编辑:闫小琪)

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
热点内容
图片资讯

桌面安全 需采用“深层防御”方法

桌面安全 需采用“深层防御”方法

深层防御方法代表了一套全方位安全哲学,帮助保护计算环境免受许多攻击手法的攻击。 ...[详细]

网络安全巧设置 Win2008 R2 防火墙详解

网络安全巧设置 Win2008 R2 防火墙详解

针对一般中小企业型来说,如果希望对企业网络进行安全管理,不一定非得花高价钱购买专...[详细]

Windows Vista中如何加密文件或文件夹

Windows Vista中如何加密文件或文件夹

要在Windows Vista加密文件或文件夹,可按下面的操作步骤进行:。 ...[详细]

信用卡背后的安全隐患

信用卡背后的安全隐患

Visa组织在2001年推出一个他们称为3DS的安全协议,也就是3 Domain Secure的缩写。试图...[详细]

周鸿祎:AVC证明360杀毒具有世界级技术

周鸿祎:AVC证明360杀毒具有世界级技术

曾令中国杀毒业难堪的AV-Comparatives国际权威评测传来喜讯:在最新公布的AVC回溯测试...[详细]