登录 - 将用户输入与数据库进行比较
Posted
技术标签:
【中文标题】登录 - 将用户输入与数据库进行比较【英文标题】:Login - Comparing user input with database 【发布时间】:2011-12-15 19:05:15 【问题描述】:我已经在谷歌上搜索了一段时间,但我仍然找不到我的问题的答案.. 即:我想知道是否有一种方法或方法可以获取数据库的值然后进行比较...我不太确定如何解释它..所以我想我会告诉你我得到了什么我的代码很远。顺便说一句,我使用 netbean 制作这个程序,我使用 odbc 数据库(mircosoft 访问)。我也在代码中使用了 try catch,但我不知道如何让它显示出来..
下面的程序并没有真正按照我想要的方式工作..因为我在比较时遇到了问题。 提前致谢。
if(request.getParameter("username")!=null && request.getParameter("username") !=""
&& request.getParameter("password")!=null && request.getParameter("password")!="")
String user = request.getParameter("username").toString();
String pass = request.getParameter("password").toString();
String check = "SELECT AccountType FROM Testing WHERE Username='"+user+"' AND Password ='"+pass+"'";
rs = stmt.executeQuery(check);
String info = rs.getString(check); // trying to get the AccountType and store it into a string
while(rs.next())
if(info != null && info !="") //checks to see if the account exist in the database
if(info.equals("Admin")) //checks to see if AccountType is "Admin"
response.sendRedirect("AdminConsole.jsp");
else
response.sendRedirect("UserConsole.jsp");
else
response.sendRedirect("ErrorPage2.jsp");
else
response.sendRedirect("ErrorPage.jsp");
connection.close();
【问题讨论】:
你有一个 SQL 注入漏洞。 您永远不应该以纯文本形式存储密码。 解决上述问题; - 使用参数化查询来防止 SQL 注入 - 存储要比较的密码的哈希值(例如 MD5)。不试图否定,这段代码是非常危险的。 【参考方案1】:请,请不要这样做。您不应在代码中执行 SQL,也不应以纯文本形式存储密码。您应该做的是调用一个参数化过程,该过程将用户名/密码作为参数,然后返回角色(或您想要的任何其他内容)。密码仍应至少进行哈希处理。
类似这样的:http://www.daniweb.com/software-development/csharp/threads/87556
在 MS Access 中,存储过程称为存储查询: http://msdn.microsoft.com/en-us/library/aa140021(v=office.10).aspx
相关部分:
过程:
create procedure ValidateUserLogin
@UserName varchar(30)
, @Password varchar(30)
as
begin
if exists (select * from UsersTable as ut
where ut.UserName = @UserName AND ut.Password = @Password)
select 1;
else
select 0;
end
类
private bool IsValidatedUser( string username, string password )
try
bool rv = false;
using ( SqlConnection con = new SqlConnection( connectionString ) )
using ( SqlCommand cmd = new SqlCommand() )
con.Open();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "ValidateUserLogin";
cmd.Parameters.Add( "@UserName", SqlDbType.VarChar, 30 ).Value = username;
cmd.Parameters.Add( "@Password", SqlDbType.VarChar, 30 ).Value = password;
rv = Convert.ToBoolean( cmd.ExecuteScalar() );
con.Close();
return rv;
catch ( Exception ex )
// Log errors
throw;
【讨论】:
哦,好吧,我试试这些方法。我对这些东西还是新手,所以只能反复试验。感谢所有回复。以上是关于登录 - 将用户输入与数据库进行比较的主要内容,如果未能解决你的问题,请参考以下文章
如何将来自用户的输入图像与 C# 中数据库中存储的图像进行比较 [关闭]