登陆中的SQL注入

    在Web应用程序的登录验证程序中,一般有用户名(username) 和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。我们有很多人喜欢将SQL语句拼接起来。例如:

    Select * from userswhere username =’ txtusername.Text ’ and password =’ txtpassword.Text ’

    其原理是通过查找users表中的用户名(username) 和密码(password) 的结果来进行授权访问,在txtusername.Text为a,txtpassword.Text为1,那么SQL查询语句就为:

    Select * from userswhere username =’ a ’ and password  =’ 1 ’

 

    如果分别给txtusername.Text 和txtpassword.Text赋值’ or ‘1’ =‘1’ --和abc。那么,SQL 脚本解释器中的上述语句就会变为:

    Select * from userswhere username =’’or  ‘1’ = ‘1’  -- and password =’abc’

    该语句中进行了两个条件判断,只要一个条件成立,就会执行成功。而'1'='1'在逻辑判断上是恒成立的,后面的"--"表示注释,即后面所有的语句为注释语句这样我们就成功登录。即SQL注入成功.

    类似的原理还有

    ' or1=1--     

    1'or'1'='1    

    x'or'1'='1'or'1'='1 

 

    如果我们给txtusername.Text赋值为:’;droptable users--即:

    Select * from userswhere username =’’;drop table users-- and password =’abc’

    整个用户表就没有了,当然这里要猜出数据表名称。想想是多么可怕的事情。

 

    防范SQL注入

    最简单的方法是对用户的输入进行判定和过滤

    可以禁止输入非法字符

Private SubtxtUserName_Change()

    Dim s As String, ss As Long, i As Long

    s = "\=<>*'- /'"                 '需要禁止的字符

    ss = txtUserName.SelStart              

    For i = 1 To Len(s)

        i = Len(txtUserName.Text)

        txtUserName.Text =Replace(txtUserName.Text, Mid(s, i, 1), "")

        If i <> Len(txtUserName.Text) And ss > 0 Then ss = ss - 1

    Next

    txtUserName.SelStart = ss

End Sub

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值