用session来进行身份验证(php+mysql环境),我的程序有严重漏洞,help me!
怎么用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




