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

解决方案 »

  1.   

    :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的,但原理是一样的,相信能对楼主有所帮助。
      

  2.   

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

  3.   

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

  4.   

    我就是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>";}
      

  5.   

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

  6.   

    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;
    }
    }
      

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

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

  12.   

    下面是代码
    <%
    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
    %>
      

  13.   

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

  14.   

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

  15.   

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