美文网首页
表单提交数据防篡改

表单提交数据防篡改

作者: 胡乱唱歌ing | 来源:发表于2019-08-21 11:16 被阅读0次

概述

有些情况数据需要更高的安全性,需要避免第三方工具抓包进行对数据修改,因此在表单提交/ajax提交数据时需要数据强一致性。

image.png

解决逻辑

前段页面

监听ajax提交,把提交的数据md5哈希,并往http header头写入X-Token

$(document).ready(function(){
    
    #监听ajax提交,把提交的数据md5哈希,并往http header头写入X-Token
    $.ajaxPrefilter(function (options, originalOptions, xhr) {
            if(options.type == "POST" || options.type=="post")
            {
                xhr.setRequestHeader('X-Token', md5(options.data+'password'));
            }
        });
})

后端验证md5哈希值

获取表单提交的原始数据,此步骤不能使用_POST,_REQUEST因为这样可能会导致md5验证不通过的问题

public function validateSecurityKey()
    {
        //取消传参的$data ,因为表单传过来的数据经过PHP key-val处理后,会导致md5一致性的问题
        #注意:只能获取到form表单enctype=application/x-www-form-urlencoded 提交的数据
        $source_data = file_get_contents("php://input");

        parse_str($source_data,$data);
        if(!$data)
        {
            throw new Exception("Error Processing Request", 1);
             Yii::app()->end();
        }
        
        $security_key = $_SERVER['HTTP_X_TOKEN']??"";

        //这里做了一个表单提交隐藏域的兼容
        if(isset($data['HTTP_X_TOKEN']))
        {
            $security_key = $data['HTTP_X_TOKEN'];
            $source_data = str_replace("&HTTP_X_TOKEN=".$security_key, '',$source_data);
        }

        if(!$security_key)
        {
            throw new Exception("Error Processing Request", 1);
            Yii::app()->end();
        }

        $md5_str = md5($source_data.'password');
        if($md5_str != $security_key)
        {
            throw new Exception("Error Processing Request", 1);
             Yii::app()->end();
        }

    }

相关文章

  • 表单提交数据防篡改

    概述 有些情况数据需要更高的安全性,需要避免第三方工具抓包进行对数据修改,因此在表单提交/ajax提交数据时需要数...

  • FormData

    表单,FormData 对象 表单概述 表单用来收集用户提交的数据,发送到服务器 表单提交 1. 提交 表单里...

  • GET表单提交/POST表单提交/数据交互/ node 垃圾回收

    GET表单提交 POST表单提交 同时处理get与post请求 数据交互 HTML 数据库 扩展

  • HTML表单的用法

    HTML表单用于用户向服务器端提交表单数据,用法为 提交的表单数据区域 。用form标签包裹着表单控件,如inpu...

  • 技术部作业指导

    目录: HTML表单--提交数据 数据库操作--查询 微信接口 其他 HTML表单 表单代码:

  • 表单提交

    表单:数据的提交 ---------action:数据提交地址,默认是当前页面 -------method:数据提...

  • JavaScript 通信 / Ajax

    Ajax 表单提交 在HTML中提供了表单提交的功能,我们可以通过表单把数据从前台提交到后台 在HTML的DOM中...

  • axios学习笔记

    一、axios的基本使用 get,获取数据 post,提交数据(表单提交以及文件上传) put,更新数据 (提交所...

  • SpringMVC-接收表单数据的方式

    前台提交表单数据到后台进行处理 form 表单提交数据,get方法会将数据通过请求url方式向后台传送,post方...

  • form表单

    form表单 action属性规定表单提交向何处发送表单数据method属性规定如何发送表单数据method=“g...

网友评论

      本文标题:表单提交数据防篡改

      本文链接:https://www.haomeiwen.com/subject/oclbsctx.html