通过表单操作属性获取POST

时间:2011-06-08 21:09:14

标签: php forms

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

如果假设我在表单中有以下操作,

<form method="post" action="/edit/pictures/delete/2235/">

我可以通过$ _POST获取URI段2235吗?

编辑:请假设有一个URL重写。 2235是变量值。我不是问如何检索2235,就好像我可以通过$_POST

检索它一样

3 个答案:

答案 0 :(得分:3)

在您的操作页面上,展开$_SERVER['REQUEST_URI']

$parts = explode('/', $_SERVER['REQUEST_URI']);

foreach($parts as $slug)
{
    echo htmlspecialchars($slug);
}

您应该能够提取该ID。

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

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

答案 1 :(得分:2)

如果你使用这样的URL,你可能会有一些.htaccess将它转换为从$ _GET访问的查询参数 - 试试这样的东西[写在我的脑海里,需要测试]:

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

如果没有,您可以随时访问$_SERVER['REQUEST_URI']并从那里提取必要的信息。

答案 2 :(得分:2)

当您将表单发布到php端点时,$ _POST只会填充来自输入元素的数据。请求路径在$_SERVER['REQUEST_URI']中可用。要从请求路径中获取id id,您可能希望使用如下的正则表达式:

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

关于你的安全问题 - 答案是POST绝对不比GET更安全。它们是不同的HTTP动词,并以稍微不同的方式传递数据,但无论哪种方式,您的应用程序接收的数据都不可信任。欺骗POST请求(如表单)和欺骗GET请求(如锚链接)一样容易。