2011-04-27 54 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

我知道這不是一個專門針對您的解決方案,但我希望有所幫助。