2017-08-31 58 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

相关问题