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

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

通过正则表达校验用户输入

首先我们可以通过正则表达式校验用户输入数据中是包含:对单引号和双"-"进行转换等字符。

然后继续校验输入数据中是否包含SQL语句的保留字,如:WHERE,EXEC,DROP等。

现在让我们编写正则表达式来校验用户的输入吧,正则表达式定义如下:

private static readonly Regex RegSystemThreats =

new Regex(@"\s?;\s?|\s?drop\s|\s?grant\s|^"|\s?|\s?union\s|\s?delete\s|\s?truncate\s|\s?sysobjects\s?|" +

"\s?xp_.*?|\s?syslogins\s?|\s?sysremote\s?|\s?sysusers\s?|\s?sysxlogins\s?|\s?sysdatabases\s?|\s?aspnet_.*?|\s?exec\s?",

  RegexOptions.Compiled | RegexOptions.IgnoreCase);

上面我们定义了一个正则表达式对象RegSystemThreats,并且给它传递了校验用户输入的正则表达式。

由于我们已经完成了对用户输入校验的正则表达式了,接下来就是通过该正则表达式来校验用户输入是否合法了,由于.NET已经帮我们实现了判断字符串是否匹配正则表达式的方法IsMatch(),所以我们这里只需给传递要匹配的字符串就OK了。

示意代码如下:

/// summary>

/// A helper method to attempt to discover [known] SqlInjection attacks.

/// summary>

/// param name="whereClause">string of the whereClause to checkparam>

/// returns>true if found, false if not found returns>

public static bool DetectSqlInjection(string whereClause)

return RegSystemThreats.IsMatch(whereClause);

/// summary>

/// A helper method to attempt to discover [known] SqlInjection attacks.

/// summary>

/// param name="whereClause">string of the whereClause to checkparam>

/// param name="orderBy">string of the orderBy clause to checkparam>

/// returns>true if found, false if not found returns>

public static bool DetectSqlInjection(string whereClause, string orderBy)

  return RegSystemThreats.IsMatch(whereClause) || RegSystemThreats.IsMatch(orderBy);

现在我们完成了校验用的正则表达式,接下来让我们需要在页面中添加校验功能。

/// summary>

/// Handles the Load event of the Page control.

/// summary>

/// param name="sender">The source of the event.param>

/// param name="e">The see cref="System.EventArgs"/> instance containing the event data.param>

protected void Page_Load(object sender, EventArgs e)

if (!IsPostBack)

// Gets departmentId from http request.

(责任编辑:闫小琪)

顶一下
(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回溯测试...[详细]