2011-04-27 55 views
0

我有HttpHandler页面,我用它来做一些包括使用数据库的东西。我需要能够阻止人们访问此文件,并确保信息的路径是我的网站,而不是另一个使用Processrequest实现此目的的网页。Sql注入问题

public void ProcessRequest (HttpContext context) { 


    if (context.Request.Url.Authority.ToString() != HttpContext.Current.Request.Url.Authority.ToString()) 
     return; 
    context.Response.ContentType = "text/plain"; 
    string str = context.Request.Form["recordsArray[]"].ToString(); 
    char[] delimiters = new char[] { ',', ';' }; 
    string[] arr = str.Split(delimiters); 

    for (int i = 0; i < arr.Length; i++) 
    { 
     Functions.Add(new tab(arr[i])); // insert records into table Tabs => int id, string name   
    } 

} 
+2

如果您担心sql注入,请向我们展示实际与db对话的代码。不要跳过那部分。 – 2011-04-27 14:01:46

+1

看来您目前正试图比较是否A!= A换句话说我会(这只是一个猜测)假设HttpContext.Current.Request.Url.Authority.ToString()实际上等于上下文,因为“当前”(上下文)。 – 2011-04-27 14:02:13

+0

@Rhhound:呃你是对的,徒劳无功。 – 2011-04-27 14:10:11

回答

3

如果你想防止让人们获得一些资源,通常你保护这个资源与验证:您授予的授权用户提供的用户名/密码,让您从未经授权的用户区分开来。

可以伪造HTTP请求并使其看起来好像它来自您的域,而实际上它不是。所以唯一的办法是使用一些秘密。

+0

是的,但我没有特定用户,它是一个新闻脚本。 – 2011-04-27 14:07:02

+0

@Israa Abd,在这种情况下,您无法区分您的网站用户和其他用户。 *我的网站*的用户不存在这样的概念,除非您提供一些秘密以识别它们。正如我所说,任何人都可以伪造一个HTTP请求。 – 2011-04-27 14:09:48

+0

同意,任何类型的安全性首先需要认证。您需要考虑如何计划识别用户,然后围绕该概念进行编码。 – pseudocoder 2011-04-27 14:43:26

0

你也可以为你处理SQL注入。

的LINQ to SQL:http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx

或东西有点简单,你可以只使用SQL参数(就是LINQ到SQL使用):

(短指南):http://www.sharpdeveloper.net/content/archive/2007/05/25/creating-sqlparameters-best-practices.aspx 或这里 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx

我知道这不是一个专门针对您的解决方案,但我希望有所帮助。