CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

PHP怎样防止站外提交 分数相送

楼主lijinxing(七夜)2005-01-03 00:00:29 在 Web 开发 / PHP 提问

哪位高手写个防止站外提交  
  封装成函数  
  最好了  
  问题点数:50、回复次数:28Top

1 楼chequan(chequan)回复于 2005-01-03 00:06:37 得分 0

upTop

2 楼chequan(chequan)回复于 2005-01-03 00:07:01 得分 0

根据referer来做Top

3 楼lynn1983(继续努力!^&^)回复于 2005-01-03 00:10:39 得分 0

“HTTP_REFERER”  
  链接到当前页面的前一页面的   URL   地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改   HTTP_REFERER。因此,这个变量不总是正确真实的。    
  Top

4 楼leyan728(乐言)回复于 2005-01-03 00:47:27 得分 0

判断提交页面的来源.Top

5 楼twt326(天地小子)回复于 2005-01-03 08:24:25 得分 5

:Request.ServerVariables("HTTP_REFERER")的工作方式    
     
     
  作者:game.19xz   来源:19xz.com      
    下列情况是从浏览器的地址栏正常取得Request.ServerVariables("HTTP_REFERER")的:    
  1.直接用<a   href>    
  2.用Submit或<input   type=image>提交的表单(POST   or   GET)    
  3.使用Jscript提交的表单(POST   or   GET)    
   
  下面我们再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情况:    
  1.从收藏夹链接    
  2.单击'主页'或者自定义的地址    
  3.利用Jscript的location.href   or   location.replace()    
  4.在浏览器直接输入地址    
  5.<%Response.Redirect%>    
  6.<%Response.AddHeader%>或<meta   http-equiv=refresh>转向    
  7.用XML加载地址    
   
  显然,Request.ServerVariables("HTTP_REFERER")在多数情况下是不能正常工作的,下面我们看一个例子:    
  ref.asp    
  <%    
  response.write   "You   came   from:   "   &   request.servervariables("http_referer")    
  %>    
   
  ref.htm    
  <%    
  Response.AddHeader   "Refresh",   "10;URL=ref.asp"    
  %>      
   
  <meta   http-equiv='refresh'   content='10;URL=ref.asp'>      
   
  <form   method=GET   action=ref.asp   name=getform>      
  <input   type=submit   value='   Go   there   (GET)   >>   '>      
  <input   type=image   style='cursor:hand'>      
  </form><p>      
  看看上面的代码会得到什么的结果.    
  <form   method=POST   action=ref.asp   name=postform>      
  <input   type=submit   value='   Go   there   (POST)   >>   '>      
  <input   type=image   style='cursor:hand'>      
  </form><p>      
   
  <a   href='ref.asp'>直接链接<p>      
   
  <a   href='#'   onclick='window.location.href="ref.asp";return   false;'>Javascript   location<p>      
   
  <a   href='#'onclick='window.location.replace("ref.asp");return   false;'>Javascript   replace<p>      
   
  <a   href='#'   onclick='document.getform.submit();return   false;'>javascript   GET<p>      
   
  <a   href='#'   onclick='document.postform.submit();return   false;'>javascript   POST      
   
  原著:歪书生    
  来自:chinaasp.com  
     
  ------------------------------------------------------------------  
  虽然是ASP的,但原理是一样的,相信能对楼主有所帮助。Top

6 楼mrshelly(Shelly)回复于 2005-01-03 08:35:20 得分 5

不要做防外部提交了。没有啥用的。Top

7 楼gaofaq(老高)回复于 2005-01-03 08:54:19 得分 0

不要做防外部提交了。没有啥用的。  
  Top

8 楼kingerq(多菜鸟)回复于 2005-01-03 09:02:14 得分 5

用SESSION吧,在提交页面注册一个SESSION,在接受页面里判断是否存在,就可以知道是不是在自己这里提交的了。Top

9 楼Jzealot(小瑞)回复于 2005-01-03 09:34:14 得分 5

HTTP_REFERER只能防止链接请求,不能防表单提交的请求  
  SESSION?聪明的人都知道先打开你的网站,事先写入session,然后再在站外提交  
   
  如果你在服务端加了严密的判断,防外部提交就没有什么意思  
  如果你想减少服务端的压力,可以把判断全部用js写,这时候就有加防外部提交的必要了  
  Top

10 楼feixuehenshui(飞雪恨水)回复于 2005-01-03 11:23:41 得分 0

还有一个方式;安全连接,证书Top

11 楼lijinxing(七夜)回复于 2005-01-03 11:47:03 得分 0

我就是Jzealot(困学老二)   的意思。  
  我想把数据验证,放到客户端来  
  这样,可以减少服务端的压力。  
  可是,站外提交就成了问题了。  
  如果使用SESSION,还不如在服务端验证  
  象这样行不行  
                  if(strpot($_server['refer']===false)exit;  
                  $Pname   =   trim($_POST["Pname"]);  
                  $Pprice   =   trim($_POST["Pprice"]);  
                  $Ptel   =   trim($_POST["Ptel"]);  
                  $Paddr   =   trim($_POST["Paddr"]);  
   
                  $sql   =   "INSERT   INTO   products(pname,pprice,ptel,paddr)   VALUES('$Pname','$Pprice','$Ptel','$Paddr')";  
                  $result   =   mysql_query($sql,$conn)   or   die("添加失败!"   .   mysql_error());   //执行添加命令!  
   
                  if   ($result){echo   "<br><center>添加成功!</center>";}Top

12 楼bflovesnow()回复于 2005-01-03 17:32:28 得分 0

验证码,其实就是   Session   的一种使用,呵呵Top

13 楼nuying117(Rosemary)回复于 2005-01-03 18:43:46 得分 0

function   submitcheck($var,   $allowget   =   0)   {  
  if($GLOBALS[$var])   {  
  global   $HTTP_SERVER_VARS;  
  if($allowget   ||   ($HTTP_SERVER_VARS['REQUEST_METHOD']   ==   'POST'   &&  
  preg_replace("/https?:\/\/([^\:\/]+).*/i",   "\\1",   $HTTP_SERVER_VARS['HTTP_REFERER'])   ==   preg_replace("/([^\:]+).*/",   "\\1",   $HTTP_SERVER_VARS['HTTP_HOST'])))   {  
  return   TRUE;  
  }   else   {  
  return   FALSE;  
  }  
  }   else   {  
  return   FALSE;  
  }  
  }Top

14 楼hancheng(hancheng)回复于 2005-01-03 19:05:31 得分 0

 
   
  验证码  
   
  验证码  
   
  www.sycru.com  
   
   
  验证码  
   
  验证码Top

15 楼uuq(杜牧)回复于 2005-01-03 19:30:52 得分 5

防不了。如楼上所说每提交一次就要手动输入一次验证码。  
  这样才能防止机器人提次。再有那些提交框名字经常变下名字。  
  Top

16 楼eok()回复于 2005-01-03 23:28:24 得分 0

我的想法:读取IP行不?Top

17 楼loveconan(放牛娃娃)回复于 2005-01-04 00:38:29 得分 0

验证要两端都做的!Top

18 楼surfchen(冲浪)回复于 2005-01-04 07:03:23 得分 0

REFERER可以伪造~~  
   
  其实我发帖的目的是看时间~嘿嘿`~Top

19 楼ashchen(老陳)回复于 2005-01-04 08:39:55 得分 0

这下你可满足了吧?  
   
  目前除了验证码,别的基本无法防止软件自动提交Top

20 楼programdolt(我普普通通,我是个杀猪的)回复于 2005-01-04 09:36:03 得分 0

收藏Top

21 楼gundamzaku(Z钢弹)回复于 2005-01-04 11:03:18 得分 0

关注一下.我也想知道.如何防止站外提交.  
  这对安全性来说比较重要吧?  
  另代问一句:SESSION可以伪造吗??Top

22 楼lijinxing(七夜)回复于 2005-01-04 14:56:57 得分 0

现在,防盗连技术不是挺不错的。  
  谁说一下防盗连。  
   
  我用验证码了。  
  我有个不需要SESSION的验证码  
  这样能否防止站外提交?  
  Top

23 楼lijinxing(七夜)回复于 2005-01-04 14:58:05 得分 0

nuying117(Danny)   这个函数   submitcheck   能否给个使用例子。Top

24 楼enjoymyself88(转转~讨厌开贴不结贴的人~~)回复于 2005-01-04 15:54:03 得分 10

下面是代码  
   
   
  <%  
  server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))  
  server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))  
  if   mid(server_v1,8,len(server_v2))<>server_v2   then  
  response.write   "<br><br><center><table   border=1   cellpadding=20   bordercolor=black   bgcolor=#EEEEEE   width=450>"  
  response.write   "<tr><td   style=font:9pt   Verdana>"  
  response.write   "<center>你提交的路径有误,禁止从站点外部提交数据!</center>"  
  response.write   "</td></tr></table></center>"  
  response.end  
  end   if  
  %>Top

25 楼enjoymyself88(转转~讨厌开贴不结贴的人~~)回复于 2005-01-04 15:58:17 得分 0

不好意思,自己改成php的吧,Top

26 楼lijinxing(七夜)回复于 2005-01-04 17:00:27 得分 0

没接触过ASP,不会改。  
  哪位大哥,帮忙改一下  
  改好了。  
  麻烦附带个应用例子  
  ^_^  
  马上结贴送分Top

27 楼nuying117(Rosemary)回复于 2005-01-04 19:49:17 得分 15

我说的那个   submitcheck   函数是引用的     discuz论坛的,你可以网上找个discuz   3.1.2   的来,查看一下他的   include/global.php   ,里面有   submitcheck   函数的,具体的应用在他的很多地方都使用到了,个人觉得这个函数挺舒服的,我一直用它,防站外提交啊,还是他好~   ^_^Top

28 楼pwtitle(doodoo)回复于 2005-01-05 10:05:41 得分 0

referer是可以伪装的。没啥子用,简单防一下可以。Top

相关问题

  • 如何防止远程提交
  • 如何防止多次重复提交?
  • php处理表单提交
  • 怎样处理文本框(textarea)内提交的数据,现在不能实现与输入的换行一致。分数巨高,难度巨小,广交天下PHP兄弟(当然不回答问题一样没
  • 通过点击图片提交表单时怎么防止二次提交?
  • 如何防止一个页面反复提交
  • 怎么样防止表单被重复提交?
  • 请问如何的防止后退以后再提交?
  • 怎样防止非本域的form提交
  • 如何防止敲“Enter”键,就提交表单?

关键词

  • 函数
  • 页面
  • 验证
  • server
  • 提交
  • 验证码
  • submitcheck
  • 防止
  • ptel
  • pprice

得分解答快速导航

  • 帖主:lijinxing
  • twt326
  • mrshelly
  • kingerq
  • Jzealot
  • uuq
  • enjoymyself88
  • nuying117

相关链接

  • Web开发类图书

广告也精彩

反馈

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