none
MVC 用Get方式 来delete 为什么会有安全漏洞? RRS feed

全部回复

  • 自己顶一下!

    2013年10月30日 2:54
  • 你的说法有问题:Get 的方式delete 有漏洞,不是说post方式 delete  就不会有安全漏洞问题。

    这篇博文:http://stephenwalther.com/archive/2009/01/21/asp-net-mvc-tip-46-ndash-donrsquot-use-delete-links-because 里面已经提到:

    GET 请求更改应用程序状态换句话说执行 GET 操作应该安全操作没有任何副作用执行一个 HTTP GET 对于应用程序没有持久影响

    POST 如果执行 POST 操作创建数据库记录然后可以创建数据库记录执行POSTPOST 操作幂等因为可以不同结果,影响应用程序执行操作。

    ·GET – Returns whatever information is identified by the request (idempotent).

    · POST – Posts new information or updates existing information (not idempotent).

    · PUT – Posts new information or updates existing information (idempotent).

    所以MVC中也要求使用 AntiXSS - 支持Html同时防止XSS攻击 :http://www.cnblogs.com/coderzh/archive/2010/06/24/AntiXSS.html

    2013年10月30日 5:00
  • 你的说法有问题:Get 的方式delete 有漏洞,不是说post方式 delete  就不会有安全漏洞问题。

    这篇博文:http://stephenwalther.com/archive/2009/01/21/asp-net-mvc-tip-46-ndash-donrsquot-use-delete-links-because 里面已经提到:

    GET 请求更改应用程序状态换句话说执行 GET 操作应该安全操作没有任何副作用执行一个 HTTP GET 对于应用程序没有持久影响

    POST 如果执行 POST 操作创建数据库记录然后可以创建数据库记录执行POSTPOST 操作幂等因为可以不同结果,影响应用程序执行操作。

    ·GET – Returns whatever information is identified by the request (idempotent).

    · POST – Posts new information or updates existing information (not idempotent).

    · PUT – Posts new information or updates existing information (idempotent).

    所以MVC中也要求使用 AntiXSS - 支持Html同时防止XSS攻击 :http://www.cnblogs.com/coderzh/archive/2010/06/24/AntiXSS.html

    谢谢Galeny的耐心回复。

    不好意思,我还是没有理解。博文作者Stephen建议的两种安全delete 方式 ,一种javascript/Jquery,第二种 POST([AcceptVerbs(HttpVerbs.Post)]).我不理解这两种方式的好处何在?

    谢谢。

    2013年10月30日 5:59
  • 删除操作无论是GET还是POST都不是绝对安全,但是GET是最不安全的。主要是存在CSRF攻击的风险。

    假如你在A网站上有管理员的权限,你可以删除一个帖子,比如http://A/delete?id=1,我是B网站,我诱骗你打开一个恶意网站,这个网站源码中有<img src="http://A/delete?id=1"></img>,那么只要你访问的恶意网站,同时你也在A网站上登录了,那么在完全不知觉的情况下,你就删除了一篇帖子!!

    使用POST可以避免这种风险,但不是绝对安全的,恶意网站可以使用<form>标签跨站POST。具体更多细节,可以参考如何防范CSRF攻击的文章。

    • 已编辑 yf liu 2013年10月30日 7:15
    2013年10月30日 7:15
  • 删除操作无论是GET还是POST都不是绝对安全,但是GET是最不安全的。主要是存在CSRF攻击的风险。

    假如你在A网站上有管理员的权限,你可以删除一个帖子,比如http://A/delete?id=1,我是B网站,我诱骗你打开一个恶意网站,这个网站源码中有<img src="http://A/delete?id=1"></img>,那么只要你访问的恶意网站,同时你也在A网站上登录了,那么在完全不知觉的情况下,你就删除了一篇帖子!!

    使用POST可以避免这种风险,但不是绝对安全的,恶意网站可以使用<form>标签跨站POST。具体更多细节,可以参考如何防范CSRF攻击的文章。

    谢谢 永峰。我在网上看了一下 CSRF的文章:

    http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

    就我看下来,我就得CSRF和Get 和Post 没有什么关系啊?为什么 GET是最不安全的?

    非常谢谢!

    2013年10月30日 7:56
  • 自己顶一下,有感兴趣的朋友吗?大家一起探讨一下。

    2013年11月5日 3:22
  • 自己顶一下,有感兴趣的朋友吗?大家一起探讨一下。

    就我上面举的那个例子来说,如果你的CGI只支持POST,那上面的攻击就失败了
    2016年5月24日 6:55