我有一个登录网页,还有一个SQL数据库。页面与数据库连接。问题是数据库中的密码是小写字母但是当我保持大写锁定时,我也可以登录。现在我想限制用户可以添加数字也是字母表的密码。当密码是小写字母并且用户使用大写锁定时,密码将不匹配。
这是我的表
CREATE TABLE [dbo].[Log_Users]
(
[Logid] [int] IDENTITY(100,1)PRIMARY KEY NOT NULL,
[Username] [varchar](55) NOT NULL,
[PASSWORD][varchar](55),
[Time_Logged_in] [datetime] NOT NULL,
[Time_Logged_Out] [datetime] NOT NULL,
[Status] [int] NOT NULL,
[Date_Logged_in] [datetime] NOT NULL,
[E_MAIL] [varchar](55) NOT NULL
)
insert into dbo.Log_Users
values('Saqib','pakistan',GETDATE(),'02/07/2010',1,GETDATE(),'saqib@wow.com')
insert into dbo.Log_Users
values('Afridi','Oops',GETDATE(),'02/09/2010',1,GETDATE(),'afridi@wowMail.com')
这是我的aspx代码
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("USerLogin", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Username", txtUserName.Text);
cmd.Parameters.AddWithValue("@UPassword", txtPWD.Text);
cmd.Parameters.Add("@OutRes", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
int output = (int)cmd.Parameters["@OutRes"].Value;
if (output == 1)
{
Response.Redirect("Details.aspx");
}
else
{
ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username Or Password')</script>");
}
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
Response.Redirect("Details.aspx");
}
else
{
ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username Or Password')</script>");
}
}
}
,存储过程是
ALTER Proc USerLogin
(
@Username VarChar(50),
@UPassword varChar(50),
@OutRes int OUTPUT
)
AS
SET @OutRes = 0
IF EXISTS(SELECT top 1 * FROM Log_Users WHERE Username = @Username and PASSWORD = @UPassword)
BEGIN
SET @OutRes = 1
Return @outRes
END
ELSE
Return @outRes
GO
任何人都可以帮我找到放置代码的位置吗?
答案 0 :(得分:2)
根据您的服务器和数据库的SQL Server排序规则,SQL Server会进行不区分大小写的字符串比较。您可以使用COLLATE关键字强制它使用区分大小写的比较。
SELECT 1 WHERE username = 'user' AND (password COLLATE Latin1_General_CS_AS) = (@password COLLATE Latin1_General_CS_AS)
哪里
请参阅:
这就是您的存储过程的样子:
ALTER Proc UserLogin
(
@Username VarChar(50),
@UPassword varChar(50),
@OutRes int OUTPUT
)
AS
SET @OutRes = 0
IF EXISTS (SELECT 1 WHERE username = @Username AND (password COLLATE Latin1_General_CS_AS) = (@UPassword COLLATE Latin1_General_CS_AS))
BEGIN
SET @OutRes = 1
END
RETURN @OutRes
顺便说一句:你看过ASP.NET Membership providers了吗?这些为您提供了一个完整的实现来处理用户和组,密码和密码重置。
问题:您是否检查了Details.aspx上的任何安全性?或者我可以浏览它吗?从你的代码来看,这看起来很像。 Please,Please,Plese非常了解具有框架内置安全功能的ASP.NET Forms Authentication features。