如何防止未登录sql注入

1、概念

SQL 注入(SQL Injection),是 Web 开发中最常见的一种安全漏洞。

可以用它来从数据库获取敏感信息、利用数据库的特性执行添加用户、导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。

 

2、造成 SQL 注入的原因 

程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的 SQL 脚本,程序在接收后错误的将攻击者的输入作为 SQL 语句的一部分执行,导致原始的查询逻辑被改变,执行了攻击者精心构造的恶意 SQL 语句。

登录防止sql注入的方法:

1.登录查询语句最好不要用连接字符串查询,防止sql注入1‘or’1‘=’1,代码如下:


 

string username="admin";

string password="123";

string str="连接字符串";

using(sqlconnection cnn=newsqlconnection(str))

{

using(sqlcommand cmd=cnn.createcommand())

{

cmd.commandtext="select count(*) from login where username='"+username+"'and password='"+password+"'";

int i=convert.toint32(cmd.executescalar());

if(i>3)

{

console.write("yes");

}

else

{

console.write("no");

}

}

}

2.登录查询语句最好要用,连接字符串来防止sql注入,例如:


 

string username="admin";

string password="123";

string str="连接字符串";

using(sqlconnection cnn=newsqlconnection(str))

{

using(sqlcommand cmd=cnn.createcommand())

{

cmd.commandtext="select count(*) from login where username=@username and password=@password";

cmd.parameters.add(new sqlparameter("username",username));

cmd.parameters.add(new sqlparameter("password",password));

int i=convert.toint32(cmd.executescalar());

if(i>3)

{

console.write("yes");

}

else

{

console.write("no");

}

}

}

3.限制错误登录次数,例如:


 

private void incerrortimes()

{

using(sqlconnection cnn2=newsqlconnection(str))

{

using(sqlcommand cmd2=cnn2.createcommand())

{

cmd2.commandtext="update login set errortimes=errortimes+1 where username=@username";

cmd2.parameters.add(new sqlparameter("username",username));

cmd2.executenonquery();

}

}

}

private void reseterrortimes()

{

using(sqlconnection cnn2=newsqlconnection(str))

{

using(sqlcommand cmd2=cnn2.createcommand())

{

cmd2.commandtext="update login set errortimes=0 where username=@username";

cmd2.parameters.add(new sqlparameter("username",username));

cmd2.executenonquery();

}

}

}

using(sqlconnection cnn=newsqlconnection(str))

{

using(sqlcommand cmd=cnn.createcommand())

{

cmd.commandtext="select * from login where username=@username";

cmd.parameters.add(new sqlparameter("username",username));

using(sqldatareader reader=cmd.executereader())

{

if(reader.read())

{

int errortimes=convert.toint32(read["errortimes"]);

if(errortimes>3)

{

console.write("登录错误次数过多,禁止登录");

return;

}

string dbpassword=read["password"];

if(password=dbpassword)

{

console.write("登录成功");

reseterrortimes()

}

else

{

console.write("登录失败");

incerrortimes();

}

}

else

{如何防止sql注入

console.write("用户名不存在");

}

}

}

}

版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

猜你还会喜欢下面的内容

    无相关信息

中国领先的互联网域名及云服务提供商

为您提供域名,比特币,P2P,大数据,云计算,虚拟主机,域名交易最新资讯报道

域名注册云服务器