2017-08-31 57 views
-2

我試圖在一個免費的SQL託管站點(www.000webhost.com)上託管的表(以編程方式在C#中)搜索表中的用戶名,並將其與用戶名旁邊存儲的「密碼」字符串進行比較。由於我以前從未處理過C#SQL連接,因此我不知道如何執行此操作。如何在SQL服務器上進行「用戶名和密碼」類型搜索?

{ SqlConnection myConnection = new SqlConnection("user id=XXXXXXXXXXXXXXX;" + "password=XXXXXXXXXXXXXX;server=databases-auth.000webhost.com;" + "Trusted_Connection=yes;" + "database=XXXXXXXXXXXXXXXX; " + "connection timeout=30"); }

的「用戶名」將用戶它TextBox1的被鍵入,而「密碼」將在TextBox2中。任何幫助代碼或鏈接到例子/網站我將能夠使用將不勝感激。先謝謝你!

+6

Nooo ...不要存儲原始密碼,總是把它們哈希... –

+0

@WillemVanOnsem是的,這是以後的計劃。 – michaelrh04

+2

你使用的是什麼框架? ASP.NET? MVC?兩者都帶有正確的認證 - 已經內置了。不要重新發明輪子,特別是如果你製造的輪子是三角形的。 –

回答

1

我建議的第一件事就是不要以原始格式發送密碼。至少嘗試將它們散列並以散列形式保存。當你想使用密碼進行查詢時,只需發送散列字符串。

對於散列,您可以使用「單向」加密格式,如MD5或SHA-256。你可以在System.Security.Cryptography中找到它們。

然後,不要連接字符串來構造查詢。而是使用參數化的命令,這樣你將具有一定的安全級別。看看link關於參數化命令

最後,如果您需要返回多於1列,請使用DataReader。如果您只需要返回1列,請使用ExecuteScalar函數,該函數返回單個值。在this link中,您將找到有關如何使用ExecuteScalar的信息。

+0

謝謝 - 它現在按預期工作,我使用系統密碼學來獲得它們。榮譽給你。 – michaelrh04

-3
public String auth(String u, String p) 
{ 

string recuperatedData = ""; 

     //Create Connection 
     SqlConnection conn = new SqlConnection(@"Data Source=DRACARYS\SQLEXPRESS;Initial Catalog=test;Integrated Security=SSPI"); 

     //SQL Command 
     SqlCommand cmd = new SqlCommand("SELECT password FROM dbo.databasename WHERE username = '" + u +"'" , conn); 

     //Open connection 
     conn.Open(); 

     //To read from SQL Server 
     SqlDataReader dr = cmd.ExecuteReader(); 

     while (dr.Read()) 
     { 
      recuperatedData = dr["password"].ToString(); 
     } 

     //Close Connections 
     dr.Close(); 

     if (recuperatedData == p) 
     { 
      //return flag value to shos you've logged in to a different function with post log in functionalities 
     } 
} 
+0

如果我的用戶名是'OR''='' –

+0

然後用與上面相同的語法格式添加OR註釋。就像SQL語法一樣。這是一個個人項目的代碼,它可以讓個人提出他們需要的想法來進行項目。一旦最初的概念問題得到解決,總是可以根據需要添加補充。 –

+0

@SoumyajyotiBhattacharya我認爲DourHighArch指的是一個字面上是'OR''=''的用戶名。重點在於,您的查詢對SQL注入是開放的。如果我試圖用用戶名「or」'=''登錄,那麼你的SQL將是:'SELECT password FROM dbo.databasename WHERE username =''OR''=''',這導致每一行都是回。 – RToyo

相關問題