Php 通过表单操作属性获取帖子

Php 通过表单操作属性获取帖子,php,forms,Php,Forms,我不记得在哪里读到过:通过表单操作属性传递数据比通过href属性传递数据更安全。验证段更安全,因为它是$\u POST,并且在提交表单时可以比较令牌以获得csrf保护,而不是直接链接。这是真的吗 如果我在一个表单中有以下动作 <form method="post" action="/edit/pictures/delete/2235/"> 我可以通过$u POST获取URI段2235吗 编辑:请假设有URL重写。2235是一个可变值。我不是问如何检索2235,只是如果我可以通过$\

我不记得在哪里读到过:通过表单操作属性传递数据比通过href属性传递数据更安全。验证段更安全,因为它是$\u POST,并且在提交表单时可以比较令牌以获得csrf保护,而不是直接链接。这是真的吗

如果我在一个表单中有以下动作

<form method="post" action="/edit/pictures/delete/2235/">
我可以通过$u POST获取URI段2235吗


编辑:请假设有URL重写。2235是一个可变值。我不是问如何检索2235,只是如果我可以通过$\u POST检索它,如果您使用这样的URL,您可能会有一些.htaccess将其转换为从$\u GET访问的查询参数-尝试类似的方法[从我的脑海中编写,需要测试]:

RewriteRule ^/edit/pictures/delete/(.+)$ ?module=pictures&action=delete&id=$1

如果没有,您可以始终访问$\u服务器['REQUEST\u URI'],并从中提取必要的信息。

在操作页面上,分解$\u服务器['REQUEST\u URI']

您应该能够提取该ID

另一种方法是将其作为隐藏的HTML字段:

<input type="hidden" name="id" value="2235" />

当您将表单发布到php端点时,$\u POST仅使用来自输入元素的数据填充。请求路径在$\u服务器['request\u URI']中可用。要从请求路径中获取id,可能需要使用如下正则表达式:

preg_match('/\/\d+\/?$/', $_SERVER['REQUEST_URI'], $matches);
$matches[0] // Contains '2235'

关于你的安全问题——答案是POST绝对不比GET更安全。它们是不同的HTTP动词,传输数据的方式略有不同,但应用程序接收的数据都不可信。像表单一样欺骗POST请求和像锚定链接一样欺骗GET请求一样容易。

你说的更安全是指安全还是可靠。。。关于如何获取段,您可能在某个地方启用了URL重写-您必须从应用程序安全的角度发布重写规则,来自post或get的数据是不相关的,它们应该被同等对待,即不受信任。这通常适用于所有用户输入。但是,通过在表单操作中定义变量,它们可以通过GET数组使用,因为您使用的是漂亮的url?你能发布你的具体规则吗?@Ben Lee,URL重写?some_id=2235到2235你的问题的答案是“有时”,这取决于你的重写规则。请公布你的确切重写规则,否则我们不能说。你不能。表单操作属性中的内容是一个GET请求参数,因此包含的所有参数都是GET参数。
preg_match('/\/\d+\/?$/', $_SERVER['REQUEST_URI'], $matches);
$matches[0] // Contains '2235'