MSSQL语句密码验证的安全漏洞


  Sql语句作为国际 标准的数据库 查问语句,在各种编程环境中得到了 宽泛的 利用 。作为一个成熟、 巩固的系统,消费者登陆和密码验证是必不可少的 。小编在平时的编程工作中发现,许多程序员在用sql语句进行消费者密码验证时是通过一个 类似这样的语句来实现的:

  Sql="Select * from 消费者表 where 姓名='"+name+"' and 密码='"+password+"'"

  其中name和password是 存放消费者输入的消费者名和口令,通过执行上述语句来验证消费者和密码是不是合法有效 。然而通过 综合 可以发现,上述语句却存在着致命的 漏洞 。当我们在消费者名称中输入下面的字符串时:111'or'1=1, 而后口令 随便输入,我们设为aaaa 。变量代换后,sql语句就变成了下面的字符串:

  Sql="Select * from 消费者表 where 姓名='111'or'1=1' and 密码='aaaa'

  我们都晓得select语句在推断 查问条件时,遇到或(or)操作就会 忽略下面的与(and)操作,而在上面的语句中1=1的值永远为true,这 象征着无论在密码中输入什么值,均能通过上述的密码验证!这个问题的解决很 方便, 步骤也众多,最常用的是在执行验证之前,对消费者输入的消费者和密码进行合法性推断,不同意输入单引号、等号等特别字符 。

  上述问题 固然看起来 方便,但 确切是存在的 。例如在互联网上很有名气的网络游戏"笑傲江湖"的早期版本就存在着这样的问题,小编也是在看了有关此游戏的 漏洞报告后才 细心 综合了自己以往编写的一些程序,居然有不少也存在着这样的 漏洞 。这 确切应该引起我们的 留神 。这也 袒露出包含小编在内的年轻程序员在编程 教训和安全意识上的缺乏 。同时也 揭示我们编程工作者在程序设计时 该当 充足考量程序的安全性,不可有半点马虎,一个看似很小的疏漏可能就会造成很严峻的 后果 。