我不记得我在哪里读到这个:通过表单操作属性传递数据比通过href属性传递数据更安全。在验证段时更安全,因为它是$ _POST,并且当提交表单时,您可以比较csrf保护的令牌,而不像直接链接。这是真的吗?
如果假设我在表单中有以下操作,
<form method="post" action="/edit/pictures/delete/2235/">
我可以通过$ _POST获取URI段2235
吗?
编辑:请假设有一个URL重写。 2235
是变量值。我不是问如何检索2235
,就好像我可以通过$_POST
答案 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请求(如锚链接)一样容易。