注册页面 直接输网址也能验证 问题

liqcet 2011-03-14 10:13:58
我的注册页面 register.php 表单POST提交到 regok.php页面处理,现在我发现地址栏直接输入localhost/regok.php 也进行验证了,怎么防止这个Bug呢 ???

regok.php代码
<?php
require ("conn.php");
$_POST = mysqlClean($_POST);
$name=$_POST['user_name'];
$passwd=$_POST['pwd'];
$repasswd=$_POST['repwd'];
$city=$_POST['city'];
$email=$_POST['email'];

if(($name=="") or ($passwd=="") or ($repasswd=="") or ($city=="") or ($email==""))
{
echo "<script language=javascript>alert('带*号的选项必须填写全!');history.go(-1)</script>";
exit;
}

if(substr_count($name, " ")>0)
{
echo "<script language=javascript>alert('帐号不能有空格');history.go(-1)</script>";
exit;
}
if (!ereg("^[_a-zA-Z0-9-]",$name))
{
echo "<script language=javascript>alert('您的帐号格式不对,只能是英文或者数字');history.go(-1)</script>";
exit;
}


$sql="SELECT * FROM user where name='$name'";
$result=mysql_query($sql);
if($myrow=mysql_fetch_row($result))
{
echo "<script language=javascript>alert('此帐号有人注册,请重新填写!');history.go(-1)</script>";
exit;
}

if($passwd<>$repasswd)
{
echo "<script language=javascript>alert('二次输入的密码不一样,请检查');history.go(-1)</script>";
exit;
}


//mysql_query("SET NAMES gb2312");
$query = "insert into user(user_id,name,pw,city,email)
values(null,'$name','$passwd','$city','$email')";
//echo $query;
//exit;
$result = mysql_query($query)
or die("注册失败: " . mysql_error());

echo $result;
$rowid = mysql_insert_id();
if ($rowid>0)
{
echo "注册成功!<hr><p>";
echo "新注册的用户是:".$name."<p>";
echo "<br><a href='login.php'>登录</a>";
}
else
{
echo "注册失败!<hr><p>";
echo "<br><a href='register.php'>重新注册</a>";
}

mysql_close();
?>


...全文
64 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqcet 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 snmr_com 的回复:]

这里要理清一些思路和原则

1.所有写数据库操作前是必须对写入字串作安全检测的

LZ显然没有做这事,安全检测包括多方面,例如防注入、特殊字符转义、防恶意提交等等

2.数据来路要确认的,虽然不能完全确认
这个其实也是上述防恶意提交的其中一个操作

3.写操作后的处理,以及程序本身的容错

如果错误不是发生自程序而是系统,没有容错就会导致代码泄漏

4.其他注意点

……
[/Quote]


我的问题就是这个 就是说 用户并没有在registe.php页面输入注册信息进行验证,而是直接输入localhost/regok.php 也进行验证了,出现提示信息(如图),现在就是要防止这个问题,当用户敲入网址时,提示错误或者 转到注册页面
ImN1 2011-03-14
  • 打赏
  • 举报
回复
这里要理清一些思路和原则

1.所有写数据库操作前是必须对写入字串作安全检测的

LZ显然没有做这事,安全检测包括多方面,例如防注入、特殊字符转义、防恶意提交等等

2.数据来路要确认的,虽然不能完全确认
这个其实也是上述防恶意提交的其中一个操作

3.写操作后的处理,以及程序本身的容错

如果错误不是发生自程序而是系统,没有容错就会导致代码泄漏

4.其他注意点




笼统的讲,就是先把流程搞清楚,排除不经流程的情况,就是不从入口入或者不从出口出的情况
hill6657 2011-03-14
  • 打赏
  • 举报
回复
可以在其他页面上来验证这个码,regok.php页面只用来生产认证码
helloyou0 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 liqcet 的回复:]
我的注册页面 register.php 表单POST提交到 regok.php页面处理,现在我发现地址栏直接输入localhost/regok.php 也进行验证了,怎么防止这个Bug呢 ???

regok.php代码
<?php
require ("conn.php");
$_POST = mysqlClean($_POST);
$name=$_POST……
[/Quote]

从你的code看不出你说的情况....你再试试
Abin-2008 2011-03-14
  • 打赏
  • 举报
回复
你可以做域名检测...检测是否为你的域名下做的提交.
daly2008 2011-03-14
  • 打赏
  • 举报
回复
在你的regok.php中可以加个判断条件,判断是否通过post方式提交数据.
if( isset($_POST['submit']) ){ //submit为你提交按钮的名字.或者获取判断empty($_POST)是否为空
。。。
} else{
跳转到注册页
}

21,890

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧