堂Di

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

方法一:原理和防盗链一样,都是检查信息来源的http 头.如果不是本站域名就阻止.(当然,这不是绝对的,因为referer是可以伪造的)

<?

$servername=$HTTP_SERVER_VARS['SERVER_NAME']; //获取本站域名

$sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"]; //获取来源的referer

$sub_len=strlen($servername); //计算本站域名的长度

$checkfrom=substr($sub_from,7,$sub_len); //截取来源域名

if($checkfrom!=$servername){ //假如截取的来源域名不等于本站域名,则终止.

    echo("数据来源有误!请从本站提交!");

    exit;

}

?>

 

处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中。提交表单之后,检查两个令牌是否匹配。如果不匹配,就知道有人试图从表单的远程副本发送数据。

要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,如下所示

<?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">    
<p><label for="name">Name</label>    
<input type="text" name="name" id="name" size="20" maxlength="40"/></p>    
<input type="hidden" name="token" value="<?php echo $token;?>"/>    
<p><input type="submit" name="submit" value="go"/></p>    
</form>

 

posted on 2014-07-04 14:42  堂Di  阅读(1742)  评论(0编辑  收藏  举报