论坛风格切换
正版合作和侵权请联系 sd173@foxmail.com
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
购买邀请后未收到邀请联系sdbeta@qq.com
  • 1896阅读
  • 1回复

[求助-网络问题]如何防止整站SQL注入方式入侵 [复制链接]

上一主题 下一主题
离线dongfang1017
 
发帖
*
今日发帖
最后登录
1970-01-01
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-07-02 22:20:36
防止SQL注入,通常一个一个文件修改不仅麻烦而且还有漏掉的危险,下面我说一下如何从整个系统防止注入。
  做到以下三步,相信你的程序就会比较安全了,而且对整个网站的维护也将变的简单。
  一、数据验证类
parameterCheck.cs  
   
public class parameterCheck{
    public static bool isEmail(string emailString){
        return System.Text.RegularExpressions.Regex.IsMatch(emailString, "['\\w_-]+(\\.
['\\w_-]+)*@['\\w_-]+([url=file://\\.[]\\.['\\w_-]+)*\\.[a-zA-Z]{2,4[/url]}");
    }
    public static bool isInt(string intString){
        return System.Text.RegularExpressions.Regex.IsMatch(intString ,"^(\\d{5}-\\d{4})|
(\\d{5})$");
    }
    public static bool isUSZip(string zipString){
        return System.Text.RegularExpressions.Regex.IsMatch(zipString ,"^-[0-9]+$|^[0-9]
+$");
    }
}

  二、Web.config
  在你的Web.config文件中,在下面增加一个标签,如下:
<appSettings>
    <add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-
USzip" />
</appSettings>

  其中key是后面的值为“OrderId-int32”等,其中“-”前面表示参数的名称比如:OrderId,后面的int32表示数据类型。
  三、Global.asax
  在Global.asax中增加下面一段:
protected void Application_BeginRequest(Object sender, EventArgs e){
    String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings
["safeParameters"].ToString().Split(',');
    for(int i= 0 ;i < safeParameters.Length; i++){
        String parameterName = safeParameters.Split('-')[0];
        String parameterType = safeParameters.Split('-')[1];
        isValidParameter(parameterName, parameterType);
    }
}  
public void isValidParameter(string parameterName, string parameterType){
    string parameterValue = Request.QueryString[parameterName];
    if(parameterValue == null) return;
    if(parameterType.Equals("int32")){
        if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx");
    }
    else if (parameterType.Equals("double")){
        if(!parameterCheck.isDouble(parameterValue)) Response.Redirect("parameterError.aspx");
    }
    else if (parameterType.Equals("USzip")){
        if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx");
    }
    else if (parameterType.Equals("email")){
        if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx");
    }
}

  以后需要修改的时候我们只需要修改以上三个文件,对整个系统的维护将会大大提高效率,当然你可以根据自己的需要增加其它的变量参数和数据类型。

1条评分
惊鸿一剑 电魂 +1 继续努力,期待您的下篇杰作 2009-07-02
离线aligu
发帖
*
今日发帖
最后登录
1970-01-01
只看该作者 沙发  发表于: 2009-07-02 22:52:55
比较深奥
想新朋友学习