求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">也不行。高手给下解决方案噢 展开
$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">也不行。高手给下解决方案噢 展开
展开全部
一般来说防止站长提交表单无非就是对每一次打开表单或提交数据都会需要加一个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 广告
2024-07-09 广告
一个好的发送邮件api公司,不只是看价格,还要考虑很多因素。建议可以多找几个比对一下。您可以到摩杜云了解下。摩杜云成立于2019年,依托于公司多年技术沉淀和强大的云计算研发实力,面向全世界各个国家和地区、企业组织和个人开发者,提供全球的云计...
点击进入详情页
本回答由摩杜云提供
展开全部
实在不行你就转到另个页面 该页面html语言meta设置20秒后转向。
页面定时转向新的地址
<meta http-equiv="refresh" content="20;URL=index.php">
页面定时转向新的地址
<meta http-equiv="refresh" content="20;URL=index.php">
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本地页面都加个session
如$_SESSION["postFlag"]="xxx";
处理提交表单的时候判断是不是存在这个session就行了
如$_SESSION["postFlag"]="xxx";
处理提交表单的时候判断是不是存在这个session就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在第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自动跳转了。
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自动跳转了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<Script Language="JavaScript"> //转向
setTimeout("location.replace('index.php')",2000)
</Script>
setTimeout("location.replace('index.php')",2000)
</Script>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询