以下登陆代码安全上有什么问题
1 <?php 2 $m = $_GET['m']; 3 $user = $_GET['user']; 4 $pass = $_GET['pass']; 5 include($m.”do.php”); 6 $sql = ”select count(*) as b from user where username=’”.$user.”‘and password=’”.$pass.”‘; 7 $r = mysql_query($sql); 8 list($count) = @mysql_fetch_array($r); 9 if($count>1){ 10 11 ……登陆成功操作 12 } 13 ?>
解析以上代码:
1.用户名跟密码都是通过get方式明文传输的,这是一个严重的问题,虽然post方式也不是特别安全,但对于这些表单提交,还是post方式最好。
2.没有过滤用户输入,存在严重的sql注入隐患,应该处理用户输入,有一个原则叫:永远不要相信用户的输入。这里就是这个道理
3.include($m.”do.php”);把用户的输入作为参数,不做处理的话,很容易出现"文件不存在"的异常
4.sql查询部分:从代码上看,数据库中密码是明文保存的,至少应该做个MD5加密吧
5.if($count>1),代码错误,难道会有两个以上相同用户名相同密码的账户吗?(即使有也应该是if($count>=1))