2010-01-31 38 views

回答

2

危害是用户可以轻松导航到该网址并执行潜在的破坏性操作。

/noform/edit #URL typed by user => Action Performed 
/noform/update #URL typed by user => Error is thrown, No Action Performed 

正常的浏览体验生成GET请求到服务器。假设是,您可以轻松导航到的任何页面(或输入到您的地址栏中)都不会执行任何数据更改功能。

A POST通过表单提交或AJAX请求生成的请求需要在服务器上更改数据的结果。

类似地,PUTDELETE的两个导轨“伪造”版本也不是您可以简单导航到使用浏览器的操作。

解决方案

的解决方案是只具有update行动,您最初会链接到edit使用类似以下内容:

button_to "Add new tracker", noform_path, :method => :put 

如果有任何类型的错误,你可能仍然需要一个编辑路径来显示用户,以便他们能够纠正某些事情。但是从你所描述的情况来看,一个单独的动作应该可以做到。

+0

那么最新的解决方案?我应该提供一个基本上只是一个空表格或button_to的表单吗? 我真的不想让用户看到另一个屏幕,然后点击另一个按钮。 – Cameron 2010-01-31 01:00:04

+4

搜索引擎蜘蛛程序加剧了POST问题,它会在您网站的每个页面上执行GET操作,系统地执行不需要的编辑和删除操作。 – 2010-01-31 01:05:12

+0

@Cameron我更新了我的答案。如果不清楚,请告诉我。 – 2010-01-31 01:09:29

2

获取应始终idempotent - 这是他们不应该执行任何动作,这将改变应用程序,数据库的状态等

正如旁白 - 在真正的RESTful形式的编辑会由HTTP Update操作执行,但Rails使用表单中的帖子和隐藏值来模拟此操作,因为浏览器没有HTTP更新。

它仍然不清楚为什么你需要一个没有输入字段的更新。也许更多的细节会有所帮助。

+2

+1当我与某人谈论它时,我永远不会记住幂等性这个词。 – 2010-01-31 01:18:06

+1

@ eed3si9n - 可能是弗洛伊德语块,它听起来像是你使用伟哥的东西。 – 2010-01-31 01:34:48

相关问题