" 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条件,从而查询数据库。
有什么办法可以避免这个问题?求大神帮忙解答。
展开
 我来答
Nebula_Freeze
推荐于2017-10-01 · TA获得超过1545个赞
知道小有建树答主
回答量:934
采纳率:0%
帮助的人:1044万
展开全部
防止注入的方法其实很简单,只要把用户输入的单引号变成双份就行了:
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("", "");
}
由于很多人会疏忽这种单引号替换,所以真正安全的做法是使用参数化查询。
wsdtwwps
2012-07-13
知道答主
回答量:27
采纳率:0%
帮助的人:19.6万
展开全部
在数据录入之前先将数据用下面的函数过滤下再调用!

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
2012-07-13 · TA获得超过1963个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:659万
展开全部
在服务器端做输入验证,例如:正则匹配字母数字下划线组合:^[a-z|A-Z|0-9|_]*$
筛选:Trim(TextBox1.Text.ToString),String.Replace("'",""),String.Replace("\"","")
等等
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无色不魔
2012-07-13 · 超过28用户采纳过TA的回答
知道答主
回答量:255
采纳率:38%
帮助的人:61万
展开全部
在输入框里判断,不让输入就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhuizhu313
2012-07-13 · 贡献了超过125个回答
知道答主
回答量:125
采纳率:0%
帮助的人:35.8万
展开全部
能不能再把你的问题详细说明白点啊
追问
就是我要做一个登陆的网页,用户输入用户ID和密码,然后查询数据库,有匹配的数据则可以登陆成功。TextBox1.Text就是用户输入的ID,需要在数据库中进行查询。但只要用户输入12' or '1'='1,那么SQL语句为select * from userinfo where userid='12' or '1'='1,
此时必定能在数据库中查到数据,所以可以登陆,这是不安全的。
想问一下有没有办法解决这个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式