All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

 
防网站登陆被破解的简单方法_[Asp.Net教程]

Writer: 归海一刀 Article type: Programming skills(编程技巧) Time: 2014/1/30 1:58:15 Browse times: 315 Comment times: 0

防网站登陆被破解的简单方法_[Asp.Net教程]


Head photo

Go homepage
Upload pictures
Write articles

防网站登陆被破解的简单方法_[Asp.Net教程] 在大多数的基于数据库的身份认证登陆模块,大多数的程序员只是用一个简单的SQL查询语句来实现,这样很容易被用户以简单的( 1’ or ’1’=’1 )查询替换给破解.其实只要稍微的修改一下代码,便可以防止.具体请参看以下两个函数的实现:
以下代码基于C#,数据库为Access
1. 未防止 1’ or ’1’=’1 替换的情况:

private bool ValidateUser(string LoginId, string LoginPwd)
{
bool isCorrect = false;

try
{
DBAccept.conn.Open();

string sql = String.Format("select UserName from UserManagement where [UserName]=’{0}’ and [Password]=’{1}’", LoginId, LoginPwd);

OleDbCommand command = new OleDbCommand(sql, DBAccept.conn);

if (command.ExecuteReader().HasRows)
{
isCorrect = true;
}
else
{
isCorrect = false;
MessageBox.Show("此管理员用户不存在或者密码错误,请重试", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show("操作数据库出错", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
DBAccept.conn.Close();
}

return isCorrect;
}

2.修正版,可正常阻止 1’ or ’1’=’1 登陆
private bool ValidateUser(string LoginId, string LoginPwd)
{
bool isCorrect = false; //定一个bool变量
try
{
DBAccept.conn.Open();

string sql = String.Format("select Password from UserManagement where [UserName]=’{0}’", LoginId);
OleDbCommand command = new OleDbCommand(sql, DBAccept.conn);
if (command.ExecuteScalar().ToString() == LoginPwd)
{
isCorrect = true;
}
else
{
isCorrect = false;
MessageBox.Show("此管理员用户不存在或者密码错误,请重试", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show("操作数据库出错", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
DBAccept.conn.Close();
}
return isCorrect;
}




There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.