zoukankan      html  css  js  c++  java
  • PHP 防止站外提交

    方法一:原理和防盗链一样,都是检查信息来源的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>
  • 相关阅读:
    作业 20181204-1 每周例行报告
    对团队成员公开感谢
    附加作业 软件工程原则的应用实例分析
    作业 20181127-2 每周例行报告
    作业 20181120-1 每周例行报告
    作业 20181113-2 每周例行报告
    作业 20181030-4 每周例行报告
    作业 20181023-3 每周例行报告
    SDWebImage的实现原理与底层结构拆解
    计算文件或者文件夹的大小用于计算下载速度或者是显示清除缓存大小
  • 原文地址:https://www.cnblogs.com/cuoreqzt/p/3824016.html
Copyright © 2011-2022 走看看