" select * from userinfo where userid=' " + TextBox1.Text+" ' "
在vs2010中输入这样的SQL语句,查询数据库中与用户输入的userid相同的数据。但是这样的作法通常会不安全,如输入12'or'1'='1,由于1=1始终成立,所以一...
在vs2010中输入这样的SQL语句,查询数据库中与用户输入的userid相同的数据。
但是这样的作法通常会不安全,如输入12' or '1'='1,由于1=1始终成立,所以一定能满足where条件,从而查询数据库。
有什么办法可以避免这个问题?求大神帮忙解答。 展开
但是这样的作法通常会不安全,如输入12' or '1'='1,由于1=1始终成立,所以一定能满足where条件,从而查询数据库。
有什么办法可以避免这个问题?求大神帮忙解答。 展开
5个回答
展开全部
防止注入的方法其实很简单,只要把用户输入的单引号变成双份就行了:
string sql = "SELECT * FROM SiteUsers WHERE UserName=" + userName.Replace("","") + "";
这样,如果输入的是上面那种恶意参数,整个SQL语句会变成:
"SELECT * FROM SiteUsers WHERE UserName=xxx; DROP TABLE SiteUsers WHERE 1=1 or UserName=xxx";
被执行的还是一个SQL语句,整个粗体部分都成为参数值。
一般的做法,是在程序中统一调用下面这样的共通函数,对参数进行处理:
private string SafeSqlLiteral(string inputSQL)
{
return inputSQL.Replace("", "");
}
由于很多人会疏忽这种单引号替换,所以真正安全的做法是使用参数化查询。
string sql = "SELECT * FROM SiteUsers WHERE UserName=" + userName.Replace("","") + "";
这样,如果输入的是上面那种恶意参数,整个SQL语句会变成:
"SELECT * FROM SiteUsers WHERE UserName=xxx; DROP TABLE SiteUsers WHERE 1=1 or UserName=xxx";
被执行的还是一个SQL语句,整个粗体部分都成为参数值。
一般的做法,是在程序中统一调用下面这样的共通函数,对参数进行处理:
private string SafeSqlLiteral(string inputSQL)
{
return inputSQL.Replace("", "");
}
由于很多人会疏忽这种单引号替换,所以真正安全的做法是使用参数化查询。
展开全部
在数据录入之前先将数据用下面的函数过滤下再调用!
function filter_Str(InString)
'***********************************
'功能:过滤输入字符串中的危险符号
'调用方法:filter_Str("String")
'***********************************
NewStr=Replace(InString,"'","''")
NewStr=Replace(NewStr,"<","<")
NewStr=Replace(NewStr,">",">")
NewStr=Replace(NewStr,"chr(60)","<")
NewStr=Replace(NewStr,"chr(37)",">")
NewStr=Replace(NewStr,"""",""")
NewStr=Replace(NewStr,";",";;")
NewStr=Replace(NewStr,"--","-")
NewStr=Replace(NewStr,"/*"," ")
NewStr=Replace(NewStr,"%"," ")
filter_Str=NewStr
end function
function filter_Str(InString)
'***********************************
'功能:过滤输入字符串中的危险符号
'调用方法:filter_Str("String")
'***********************************
NewStr=Replace(InString,"'","''")
NewStr=Replace(NewStr,"<","<")
NewStr=Replace(NewStr,">",">")
NewStr=Replace(NewStr,"chr(60)","<")
NewStr=Replace(NewStr,"chr(37)",">")
NewStr=Replace(NewStr,"""",""")
NewStr=Replace(NewStr,";",";;")
NewStr=Replace(NewStr,"--","-")
NewStr=Replace(NewStr,"/*"," ")
NewStr=Replace(NewStr,"%"," ")
filter_Str=NewStr
end function
追问
这是C#的函数吗?能否给我C#的函数。
追答
不是C#的函数,是ASP的函数。C#不熟,没法帮你改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在服务器端做输入验证,例如:正则匹配字母数字下划线组合:^[a-z|A-Z|0-9|_]*$
筛选:Trim(TextBox1.Text.ToString),String.Replace("'",""),String.Replace("\"","")
等等
筛选:Trim(TextBox1.Text.ToString),String.Replace("'",""),String.Replace("\"","")
等等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在输入框里判断,不让输入就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能不能再把你的问题详细说明白点啊
追问
就是我要做一个登陆的网页,用户输入用户ID和密码,然后查询数据库,有匹配的数据则可以登陆成功。TextBox1.Text就是用户输入的ID,需要在数据库中进行查询。但只要用户输入12' or '1'='1,那么SQL语句为select * from userinfo where userid='12' or '1'='1,
此时必定能在数据库中查到数据,所以可以登陆,这是不安全的。
想问一下有没有办法解决这个问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询