- UID
- 1
- 精华
- 积分
- 76361
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
所谓“安全”指的是:
1、服务器不直接存储密码。因此当有人要黑服务器的时候,他只能看到一个用户名和一串MD5的字符串。
2、POST的过程中,不直接传输密码到服务器。这样免得有人用抓包软件,抓取你的POST包,然后看到密码。
之所以用MD5是因为MD5是不可逆的算法(就目前而言),因此当密码被转换成MD5字符串的时候,就不能再转换回来。
思路:
1、用户注册的时候,服务器存储用户名和密码的md5值。注册的页面调用JavaScript将密码处理为MD5字符串,然后Post给服务器。
2、用户登录的时候(访问login.php),服务器生成一个随机字符串,然后把随机字符串发给用户的浏览器(用户看不到)。
3、用户输入了用户名和密码的时候,点“提交”,然后用户的浏览器将密码处理为MD5字符串,再把这个MD5字符串和服务器发来的随机字符串以一种特定的算法进行混合、加密,再POST发给服务器。
4、服务器收到POST包后,从POST包中取得先前发送给用户的随机字符串,然后再根据服务器数据库存储的用户的密码的MD5值与刚才取得的随机字符串进行相同的算法的混合、加密,对比用户POST包中提交的已加密的字符串,来判断用户是否正确输入了密码。是,则判定用户已经登录。
PHP代码如下:- <?php
- //测试用的用户名:0xAA55
- $UserName="0xAA55";//用户名存储在数据库
- //测试用的密码:abcd1234,注意区分大小写
- $Password="abcd1234";//密码不存储在数据库中
- $LogKey=md5($Password);//数据库存储的是密码的MD5值
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type"content="text/html;charset=gb2312"/>
- <title>登录</title>
- <!-- JavaScript的MD5算法需要自己实现,因此需要一个md5.js的文件。 -->
- <script type="text/javascript" src="js/md5.js"></script>
- <script type="text/javascript">
- function SubmitLoginForm()//这是用户点提交按钮时执行的程序
- {
- var PW=document.getElementById("password");//取得用户输入的密码
- var Key=document.getElementById("speckey");//服务器提供的随机字符串
- PW.value=StringMD5(StringMD5(PW.value) + Key.value);//混合、加密
- document.getElementById("LoginForm").submit();//提交给服务器
- }
- </script>
- </head>
- <body>
- <?php
- //如果浏览器没有POST用户名,则产生一个登录的表单
- if(empty($_POST["Username"]))
- {//产生一个登录页面
- $Seed=md5(date("YmdHis") . rand(100,199));//生成随机字符串
-
- //表单
- echo'<form id="LoginForm" action="login.php" method="post">';
-
- //经典的“用户名”“密码”表单
- echo' 用户名:<br/>';
- echo' <input type="text" name="Username"/><br/>';
- echo' 密码:<br/>';
- echo' <input type="password" id="password" name="Password"/><br/>';
-
- //服务器发送随机字符串给用户的浏览器
- echo' <input type="hidden" id="speckey" name="speckey" value="' . $Seed . '"/><br/>';
-
- //提交按钮
- echo' <input type="button" value="登录" onclick="SubmitLoginForm()"/>';
- echo'</form>';
- }
- else//浏览器POST用户名,那么检测用户输入的密码是否正确
- {
- //验证登录
- if( $_POST["Username"] == $UserName && //如果用户名正确
- $_POST["Password"] == md5($LogKey . $_POST["speckey"]))//密码也匹配
- {
- echo"登录成功!<br/>";
- }
- else
- {
- echo"登录失败!<br/>";
- }
- }
- ?>
- </body>
- </html>
复制代码 MD5的JavaScript代码,请看此贴:http://www.0xaa55.com/thread-984-1-1.html |
|