路线方法¶有一个快捷方式@Method注释来指定 允许路由的HTTP方法。要使用它,请导入方法 注释命名空间:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/blog")
*/
class PostController extends Controller
{
/**
* @Route("/edit/{id}")
* @Method({"GET", "POST"})
*/
public function editAction($id)
{
}
}
我见过很多开发人员将Method限制为只有GET或POST, 但由于控制器默认允许两者,为什么开发人员选择将其限制为只有一种方法呢?这是某种安全措施吗?如果是的话会有什么样的攻击来保护你?
答案 0 :(得分:1)
首先,the spec之后有几种方法可用,而不仅仅是GET和POST
我不认为这是一个安全原因,更重要的是尊重标准(例如REST methods)。 我个人对几种行为使用不同的方法。对我来说,有看版本和应用版本的动作 对于单个URL,这是两种不同的行为。即使最后的响应趋于不改变,控制器级别的行为也是不同的。
我认为这是个人偏好的问题,我更喜欢看
/**
* @Route("/edit")
* @Method({"GET"})
* @Template
*/
public function editAction()
{
$obj = new Foo;
$obj->setBaz($this->container->getParameter('default_baz'));
$type = new FooType;
$form = $this->createForm($type, $obj, array(
'action' => $this->generateUrl('acme_foo_bar_doedit'),
'method' => 'PUT'
));
return array(
'form' => $form->createView()
);
}
它非常清楚它的作用。它只是实现您需要的形式,不处理任何用户输入 现在,您可以通过添加第二种方法来添加处理版本的操作
/**
* @Route("/edit")
* @Method({"PUT"})
* @Template("AcmeFooBundle:Bar:edit.html.twig")
*/
public function doEditAction(Request $request)
{
$obj = new Foo;
$type = new FooType;
$form = $this->createForm($type, $obj, array(
'action' => $this->generateUrl('acme_foo_bar_doedit'),
'method' => 'PUT'
));
$form->handleRequest($request);
if ($form->isValid()) {
// Play with $obj
}
return array(
'form' => $form->createView()
);
}
也很容易,并且可以在您的应用程序的其他地方轻松使用(而不是在默认版页面中)
答案 1 :(得分:0)
我个人总是定义一个请求方法(POST,GET,PUT等)。我认为(特别是使用RESTful API')这是透明的。它可以保护您免受某些攻击,因为您限制了可以使用的方法。这也是有道理的,因为如果你登录POST数据并且没有得到它,如果你要求一篇文章,你想要得到它:)看看我的意思?只有它才能让它变得更加透明'我已经抓住了我。我总是喜欢定义这些方法,无论是为了清晰还是其他任何方法。
编辑:Haven尚未看到其他答案(必须在我按下提交按钮时添加:))
答案 2 :(得分:0)
有很多理由可以在POST,GET,PUT和DELETE方法(或Http动词)之间进行选择。首先,使用GET方法存在一些限制,例如,您无法在URL查询字符串或MULTI-PART表单中包含大量数据来上载文件。 关于使用POST和GET方法有很多安全方面的考虑,我甚至不知道从哪里开始。你可以谷歌。最后在RESTful Web服务约定中,CRUD(创建/检索/更新/删除)操作被映射到Http方法(POST / GET / PUT / DELETE)。例如:
path: /student/{id}, method GET returns a student
path: /student, method POST creates a student
path: /student, method PUT updates student info
最重要的安全原因之一是URL通常记录在ISP,Apache Web服务器和网络设备(防火墙......)中,如果您包含敏感数据(如会话ID),...您的数据将会在许多你不知道的地方用纯文本存储。我还建议您查看OWASP top 10。