求php防止站外直接提交网址的方法

<?$servername=$HTTP_SERVER_VARS['SERVER_NAME'];$sub_from=$HTTP_SERVER_VARS["HTTP_REFE... <?
$servername=$HTTP_SERVER_VARS['SERVER_NAME'];
$sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"];
$sub_len=strlen($servername);
$checkfrom=substr($sub_from,10,$sub_len);
if($checkfrom!=$servername){
echo("<script>alert('请不要从外部提交数据!');window.location.href='login.php';</script>");
exit;
}
?>

我在index.php(不允许站外提交)里放了此段代码用来防止站外提交。

然后在p.php(允许站外提交)里放了如下代码:
<script>window.setTimeout("location='index.php'",20000)</script>

这样访问p.php之后,等待20秒,自动跳到index.php后也提示:请不要从外部提交数据!

问题:
怎么写这两个页面内的代码才能让访问时p.php暂停20秒之后跳到index.php不算站外提交。
且直接在网址输入http://www.xxx.com/index.php属于站外提交。
用<meta http-equiv="refresh" content="20;URL=index.php">也不行。高手给下解决方案噢
展开
 我来答
百度网友50f744e
推荐于2016-04-10 · TA获得超过135个赞
知道小有建树答主
回答量:311
采纳率:54%
帮助的人:112万
展开全部

一般来说防止站长提交表单无非就是对每一次打开表单或提交数据都会需要加一个token来进行验证了,这个其实与验证码做法没什么两样了,下面来看几个防止站外远程提交表单的例子。


例子一:每一次打开提交页面生成一个token然后保存在session中,当表单提交时来判断当前的token值与session是否一致,如果是的就是正常提交否则就是无效提交了。

具体代码如下:

<?php     

session_start();     

     

if ($_POST['submit'] == "go"){     

    //check token     

    if ($_POST['token'] == $_SESSION['token']){     

        //strip_tags     

        $name = strip_tags($_POST['name']);     

        $name = substr($name,0,40);     

        //clean out any potential hexadecimal characters     

        $name = cleanHex($name);     

        //continue processing....     

    }else{     

        //stop all processing! remote form posting attempt!     

    }     

}     

     

$token = md5(uniqid(rand(), true));     

$_SESSION['token']= $token;     

     

 function cleanHex($input){     

    $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);     

    return $clean;     

}     

?>     

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">     

 <label for="name">Name</label>     

<input type="text" name="name" id="name" size="20" maxlength="40"/>      

<input type="hidden" name="token" value="<?php echo $token;?>"/>     

 <input type="submit" name="submit" value="go"/>      

</form>
摩杜云
2024-07-09 广告
一个好的发送邮件api公司,不只是看价格,还要考虑很多因素。建议可以多找几个比对一下。您可以到摩杜云了解下。摩杜云成立于2019年,依托于公司多年技术沉淀和强大的云计算研发实力,面向全世界各个国家和地区、企业组织和个人开发者,提供全球的云计... 点击进入详情页
本回答由摩杜云提供
binbin2017
2007-06-10 · TA获得超过3992个赞
知道小有建树答主
回答量:1160
采纳率:0%
帮助的人:904万
展开全部
实在不行你就转到另个页面 该页面html语言meta设置20秒后转向。
页面定时转向新的地址
<meta http-equiv="refresh" content="20;URL=index.php">
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunboatz
2007-06-22 · TA获得超过161个赞
知道小有建树答主
回答量:313
采纳率:100%
帮助的人:257万
展开全部
本地页面都加个session
如$_SESSION["postFlag"]="xxx";

处理提交表单的时候判断是不是存在这个session就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lovemaggie20
2007-06-13 · TA获得超过137个赞
知道答主
回答量:95
采纳率:0%
帮助的人:66.6万
展开全部
在第2个页面加个变量传过去,再判断这个变量来决定是不是禁止访问.
index.php
<?
$i=$_GET['i'];
$servername=$HTTP_SERVER_VARS['SERVER_NAME'];
$sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"];
$sub_len=strlen($servername);
$checkfrom=substr($sub_from,10,$sub_len);
if($checkfrom!=$servername and !$i){
echo("<script>alert('请不要从外部提交数据!');window.location.href='login.php';</script>");
exit;
}
?>

p.php
<script>window.setTimeout("location='index.php?i=1'",20000)</script>

问题是解决了,但是觉得不是很好。呵呵
也是一个思路吧,个人挺反感url后带变量的,换成隐藏表单POST过去也是可以的。。不过就不能用js自动跳转了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ab0235e16
2007-06-18
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
<Script Language="JavaScript"> //转向
setTimeout("location.replace('index.php')",2000)
</Script>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式