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>
  • 相关阅读:
    leetcode题目19.删除链表的倒数第N个节点(中等)
    Android学习笔记---使用Service模仿下载效果
    Android学习笔记-简单聊天界面的实现
    Android学习笔记-ContentProvider操作
    Android高级-Android操作SQL数据管理,增删改查
    Android高级-正则表达式
    Android高级-SQL语言
    Android学习之路-录音功能实现
    gitee上传下载代码命令
    opencv进行视频播放每帧处理,读取视频失败
  • 原文地址:https://www.cnblogs.com/cuoreqzt/p/3824016.html
Copyright © 2011-2022 走看看