laravel 表单方法伪造

有时候,我们可能需要手动定义发送表单数据所使用的 HTTP 请求方式,而 HTML 表单仅支持 GET 和 POST 两种方式,如果要使用其他的方式,则需要自己来定义实现。

HTTP 请求方式概述

最常见的 HTTP 请求方式自然是 GET 和 POST,相信你已经很熟悉,除此之外,HTTP 协议还定义了很多其他的请求方式,可以在 HTTP/1.1: Method Definitions 中查看 HTTP/1.1 协议支持的所有请求方式,不同的请求方式用于不同类型的请求:

  • OPTIONS:允许客户端查看服务器的性能。这个方法会请求服务器返回该资源所支持的所有 HTTP 请求方法,该方法会用‘*‘来代替资源名称,向服务器发送 OPTIONS 请求,可以测试服务器功能是否正常。JavaScript 的 XMLHttpRequest 对象进行 CORS 跨域资源共享时,就是使用 OPTIONS 方法发送嗅探请求,以判断是否有对指定资源的访问权限。
  • GET:请求指定的页面信息,并返回响应实体。一般来说 GET 方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。
  • HEAD:与GET方法一样,都是向服务器发出指定资源的请求,但是服务器在响应 HEAD 请求时不会回传资源的内容部分(即响应实体),这样我们在不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。
  • POST:向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据包含在请求体中。POST 方法是非幂等的方法,因为这个请求可能会创建新的资源或修改现有资源。
  • PUT:向指定资源位置上传其最新内容,PUT 方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容,常用于修改指定资源。
  • DELETE:请求服务器删除所请求 URI 所标识的资源。DELETE 请求后指定资源会被删除,DELETE 方法也是幂等的。
  • TRACE:请求服务器回显其收到的请求信息,该方法主要用于 HTTP 请求的测试或诊断。
  • CONNECT:该方法是 HTTP/1.1 协议预留的,能够将连接改为管道方式的代理服务器。通常用于 SSL 加密服务器的链接与非加密的 HTTP 代理服务器的通信。
  • PATCH:出现的较晚,它在 2010 年的 RFC 5789 标准中被定义。PATCH 请求与 PUT 请求类似,同样用于资源的更新。二者有以下两点不同:1、PATCH 一般用于资源的部分更新,而 PUT 一般用于资源的整体更新;2、当资源不存在时,PATCH 会创建一个新的资源,而 PUT 只会对已在资源进行更新。

我们可以在命令行中通过 curl 进行一些简单的测试:

Laravel 中的 HTTP 请求方式

Laravel 路由支持通过上面的大部分常用请求方式:

/**
 * Laravel 路由支持的 HTTP 请求方式
 *
 * @var array
 */
public static $verbs = [‘GET‘, ‘HEAD‘, ‘POST‘, ‘PUT‘, ‘PATCH‘, ‘DELETE‘, ‘OPTIONS‘];

并为其提供了相应的路由定义方法:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

在浏览器地址栏访问某个 URL 采用的是 GET 请求,对于其他请求方式要怎么实现呢,一种方法是通过 HTML 表单元素的 method 属性,另一种方法是在 JavaScript 脚本中发起 HTTP 请求。对于 HTML 表单属性而言,有一个问题是 HTML 表单仅支持 GET 和 POST 请求,如果要使用其他请求方式怎么办?答案是通过表单方法伪造,下面我们就来介绍如何在 Laravel 中进行表单方法伪造。

表单请求方法伪造

要告知 Laravel 当前提交的表单使用的是 GET/POST 之外的其他请求方式,需要在表单中添加一个名为 _method 的隐藏字段,字段值是「PUT」、「DELETE」或 「PATCH」。Laravel 在处理提交表单请求时,会将字段值作为请求方式匹配对应的路由。比如下面这个表单:

<form action="/task/1" method="POST">
    <input type="hidden" name="_method" value="DELETE">
</form>

Laravel 会将其看作是 DELETE 请求,并将其匹配到对应的 Route::delete 路由进行处理,而不是 Route::post 路由。

其他请求方式实现方式也是一样,不再赘述。

原文地址:https://www.cnblogs.com/sgm4231/p/10283481.html

时间: 2024-10-13 22:05:58

laravel 表单方法伪造的相关文章

PHP获取表单方法总结

php接受通过HTML表单提交的信息时,会将提交的数据保存在全局数组中,我们可以调用系统特定的自动全局变量数组来获取这些值.常用的自动全局变量如下所示: $_GET $_POST $_REQUEST 在获取表单数据中,最常用的自动全局变量是$_GET和$_POST,它们分别获取通过GET方法提交的数据和通过POST方法提交的数据.   比如一个名称为"txtAge"的文本框表单控件,如果用GET方法提交,可以用 $_GET["txtAge"]或者$_GET['txt

清空表单方法 清空变量 iview modal

方法一 通过json序列号和反序列号 清空一次数据 数据需要copy出来一份 orgFormClearAllInput () { this.$refs.n1.formValidate = JSON.parse(JSON.stringify(this.$refs.n1.formValidate2)) } 方法二 clearFormData () { let form = { b0111: '', b0101: '', b0104: '', b0117: '', b0124: '', b0131:

51nod 1179 最大的最大公约数 (无耻的打表计数法)

题目: 考虑清楚就简单了,我们把每个数的因子计数. 两个数的公约数就是计数超过2的数,然后找到最大的那个就好了. 计算每个数的素因子,记得sqrt(),不然会超时. 打表计数法时间复杂度O(n*sqrt(n)). 代码: #include <iostream> #include <algorithm> #include <map> #include <vector> #include <set> #include <math.h> #

关于python单方法的类

1.大部分情况下,你拥有一个单方法类的原因是需要存储某些额外的状态来给方法使用. 此种情况下可以使用闭包代替,参考 关于这个计数器闭包和类各有千秋吧,但如果不是但方法的类,使用闭包模拟面向对象,那肯定是没有使用类好,类不光是封装了,还可以继承,代码结构也更清晰. 将单方法的类转换为函数 问题 你有一个除 __init__() 方法外只定义了一个方法的类.为了简化代码,你想将它转换成一个函数. 解决方案 大多数情况下,可以使用闭包来将单个方法的类转换成函数. 举个例子,下面示例中的类允许使用者根据

laravel 表单和HTML扩展包

安装 通过composer安装扩展包. 在根目录的composer.json文件中添加laravelcollective/html. "require": { "laravelcollective/html": "5.3.*" } 接着在终端中更新composer: composer update 然后,在config/app.php文件中添加新的providers: 'providers' => [ // ... Collective\H

看数据结构写代码(38) 图的邻接多重表表示法与实现

图的邻接多重表 是 无向图的 另一种表示法.其与 邻接表 的差别 仅仅 在于 ,邻接表 用 两个 顶点 来表示 一条边,而 邻接多重表 用一个 顶点来表示一条边.这样使得 邻接多重表 在 某些操作 要 来的 方便.例如 将 搜索过的边 做记号 或者 删除 一条边. 下面是邻接多重表的结构: 下面的 6条边 用 6个弧 节点表示,用12个指针指向,每个弧节点被 指向2次.这样使得我们 在 释放内存的时候 需要格外小心. 下面上代码: 源码工程文件网盘地址:点击打开链接 // AMLGraph.cp

Laravel表单提交

首先,先做一个简单的表单页面 <html> <head> </head> <body> <form action="/submit" method="post"> <input type="text" name="a"></input> <input type="text" name="b">

数据库设计:关于枚举类型的表结构设计法,个人拙见

枚举,一种数据类型(相对于C#语言而言,当然,Java,PHP也有).项目中使用枚举有以下一些优点. 第一:定义直观,使用方便. 第二:便于维护与扩展(实际上还是直观) 对于枚举类型的数据的显示,一般都是在程序里面定义这样一个枚举,然后通过程序获取枚举对应的 键名称,或者 DescriptionAttribute 标记,或者自定义 Attribute,在数据绑定的时候进行处理并 显示对应枚举值的描述信息或者键名称.(这会增加程序的运行成本与计算开销,个人拙见!!) 来看问题: 有一张订单表,单条

Laravel表单篇----request请求,session存储,response响应以及中间件

请求Request 取值(传入参数Request $request) $request -> input('name');(请求name值) $request -> input('sex', '未知');(也可以请求未被定义的参数) $request -> all();(得到所有请求值) 判断取值类型 $request -> method();(判断请求类型) $request -> isMethod('GET');(判断是否为get请求) $request -> aj