矩阵验证的后台

作者:lu4nx 发布时间:September 25, 2011 分类:默认分类,安全架构

在给网站后台做强化设计,根据这么多年的经验,光验证用户名和密码真的让我太没安全感了。头脑风暴了一下,从农行的动态密码卡那里得到的灵感。登陆后台除了验证用户名以外,还得有“动态密码卡”。“动态密码卡”就是一个矩阵,里面的每行每列都有一个对应的值,登陆页面会随机显示两组行列号,需要输入行列号对应的值才行,这个雏形我只随机了一组行列号,慢慢来。当然弱点就是管理员需要保存这个“动态密码卡”上的数组且不被人得到:)

测试代码,这里的矩阵如下:
e07d14caa83df770bf09e6c7.png
044ded8ab6b8adbcfc1f10a9.png

854c2c17fa964a2521a4e9b8.png

界面,test.php:

 

<?php

 include_once("c.php");

 //随机生成一个行列号

 $test = rnd();

 $num1 = $test[0];

 $num2 = $test[1];

 

?>

<p>行:<?=$num1?>列:<?=$num2?></p>

<form id="form1" name="form1" method="POST" action="c.php">

  <label>

  <input type="text" name="num" id="textfield" />

  <input name="rnd1" type="hidden" value="<?=$num1?>" />

  <input name="rnd2" type="hidden" value="<?=$num2?>" />

  </label>

  <label>

  <input type="submit" value="提交" />

  </label>

</form>

 

核心代码,c.php:

 

<?php

 /*

 生成一个5行5列的矩阵,为了不头脑糊涂,故让数组从1下标开始。

 */

 $pass = Array();  

 $pass[0] = 0;

 $pass[1] = Array(0,1,2,3,4,5);

 $pass[2] = Array(0,6,7,8,9,10);

 $pass[3] = Array(0,11,12,13,14,15);

 $pass[4] = Array(0,16,17,18,19,20);

 $pass[5] = Array(0,21,22,23,24,25);

 

 /*

 函数说明:随机行列号

 */

 function rnd()

 {

  //产生1到5之间的随机数

  $rand1 = rand(1,5);

  $rand2 = rand(1,5);

  

  //返回一个数组,第一个元素包含行号,第二个元素包含列号

  return Array($rand1,$rand2);  

 }

 

 //接收行号

 $rnd1 = $_POST['rnd1'];

 //接受列号

 $rnd2 = $_POST['rnd2'];

 //接受对应的值

 $num = $_POST['num'];

 

 $check = $pass[$rnd1][$rnd2];

 

 if ( $num >0 )

 {

  if ( $num == $check )

   echo '正确,你输入的是:'.$num;

  else

   echo ':-(';

 }

?>

 

 这只是一个原型罢了,还需要很多强化。