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.
(责任编辑:闫小琪)
- 上一篇:网站怎样保安全 安全建站指南
- 下一篇:实例解析防火墙部署搭建与故障排除(三)