CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

用session来进行身份验证(php+mysql环境),我的程序有严重漏洞,help me!

楼主nenuxjms(杭州知府)2002-12-07 00:41:11 在 Web 开发 / PHP 提问

怎么用session身份来进行验证php+mysql环境  
   
  首先,在MySql中建立一个存放用户信息的数据库    
   
  数据库名为XinXiKu   ,表名为user;表定义如下:    
   
  create   table   user(  
  ID   INT(4)   NOT   NULL   AUTO_INCREMENT,  
  name   VARCHAR(8)   NOT   NULL,    
  password   CHAR(8)   NOT   NULL,    
  PRIMARY   KEY(ID)    
  )  
   
   
  我们先编写一个用户登录界面,文件名为login.php,代码如下:  
  <form   action="login1.php">    
   
  用户名:<input   type="text"   name="name"><br>    
   
  口   令:<input   type="text"   name="password"><br>    
   
  <input   type="submit"   value="登录">    
   
  </form>    
   
  login1.php处理提交的表单,代码如下:    
   
   
  <?  
  $db=mysql_connect("localhost","root","");  
  mysql_select_db("XinXiKu",$db);  
  $result=mysql_query("SELECT   *   FROM   user   where   name='$name'   and   password='$password'",$db);  
  if   (list($name,$password)=mysql_fetch_row($result))  
  {  
  //注册用户  
  session_start();  
  session_register("sessionname");  
  $sessionname=$name;  
  //   身份验证成功,以自己身份跳转到会员自己的管理账号页面  
  header("location:guanli.php?name=$name");  
  }  
  else    
  {  
  echo"身份验证失败,您无权共享网络资源!";    
  }  
  ?>    
   
  为了放置用户在后续的操作中用   http://domainname/guanli.php?name=用户名,来绕过身份验证。所以,后续的操作应先检查变量是否注册:已册,则进行相应操作,否则视为非法登录。相关代码如下:  
  <?  
  session_start();    
  if   (!session_is_registered("sessionname"))    
  {    
  echo   "身份验证失败,属于非法登录!";    
  }    
  else  
  {    
  //成功登录进行相关操作  
  ...  
  }    
  ?>    
   
  问题就在上面这个放置用户绕过验证里面,假设用户一先用自己的账号登录,然后输入网址http://domainname/guanli.php?name=别人的用户名,这样他就可以进入别人的账号里面去行使属于别人的权限。  
   
  请大家帮我,实现自己只能管理自己的账号,在只需验证一次自己身份的情况下在多个页面直接行使管理权限,身份账号的传递,并且在关闭浏览器后本次登录失效。 问题点数:100、回复次数:8Top

1 楼tmj(革命者)回复于 2002-12-07 08:57:27 得分 0

我想你session_register("sessionname");的內容應是用戶不知的內容,如name=别人的用户名   的   (别人的用户名之系統自動生成的12位id),別人就很難亂搞成功了。Top

2 楼ALAN_1999(试试看:))回复于 2002-12-08 14:24:04 得分 0

可不可以把USERNAME用隐藏的表单来传呢?而不把它放在明面(即?username)  
  来传呢?Top

3 楼LostinDark(Lost_in_Dark)回复于 2002-12-09 16:11:17 得分 40

把用户名作为session存储,在要验证页面里直接取这个session里面存储的用户名.  
  注意:最好用$_SESSION这个数组.  
  Top

4 楼gameboys(gameboys)回复于 2002-12-10 10:21:14 得分 0

用隐藏的表单来传只要查看源码,里面的东西就显示出来了。Top

5 楼cloudwon(地球之巅)回复于 2002-12-10 12:19:58 得分 0

敏感的信息放在session中,必要的话还可以加密一下。不要用表单来传送。Top

6 楼wmchief(wm_chief)回复于 2002-12-10 12:58:49 得分 20

session变量用$HTTP_SESSION_VARS[session];取出就不会有这问题了Top

7 楼laipu(寻梦天涯)回复于 2002-12-10 12:59:22 得分 20

判断$sessionname是否等于$name  
  不过最好给session变量起名字时最好复杂些,防止被别人猜到,否则仍然可通过url传递,你的问题仍然解决不掉!Top

8 楼Parvel(逛逛)回复于 2002-12-10 13:47:04 得分 20

赞成用$HTTP_SESSION_VARS[session];  
  把register_globals   off之后比较安全一些.  
  很多表单传递都多少不保险...Top

相关问题

  • 如何php+mysql实现身份验证(散分。。。。)
  • PHP4.2.3+APACHE+MySQL验证问题
  • ---==== Session 跨站验证方法 ====---
  • 谁能给我一个比较好的php+mysql环境下的身份验证页面?
  • 请教PHP中身份验证问题
  • PHP做邮件登陆客户验证
  • session验证登陆安全吗?
  • STRUTS下,验证SESSION的标签编写.
  • 如何绕过asp的session的验证
  • 在前台中验证Session值和cookie

关键词

  • 验证
  • 用户
  • 账号
  • 代码
  • php
  • null
  • 表单
  • 身份
  • 变量
  • 登录

得分解答快速导航

  • 帖主:nenuxjms
  • LostinDark
  • wmchief
  • laipu
  • Parvel

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo