Html 在asp.net mvc中使用链接调用删除方法

Html 在asp.net mvc中使用链接调用删除方法,html,asp.net,entity-framework,security,asp.net-mvc-4,Html,Asp.net,Entity Framework,Security,Asp.net Mvc 4,我知道使用http GET删除数据是一个安全漏洞。通常从链接中调用delete也是一个坏主意吗?我特别指的是asp.net mvc actionlink,它将http方法指定为POST @Ajax.ActionLink("Delete", "DeleteNote", new { noteid = Model.noteid }, new AjaxOptions { Confirm = "Delete?", HttpMethod = "POST", OnSuccess = "

我知道使用http GET删除数据是一个安全漏洞。通常从链接中调用delete也是一个坏主意吗?我特别指的是asp.net mvc actionlink,它将http方法指定为POST

@Ajax.ActionLink("Delete",
"DeleteNote", new { noteid = Model.noteid },
new AjaxOptions
{
    Confirm = "Delete?",
    HttpMethod = "POST",
    OnSuccess = "postmessage('note_Deleted_" + Model.noteid + "')"
})

我不知道我是否会将从GET请求中删除数据描述为一个必要的安全漏洞(前提是您的应用程序实现了适当的安全性),但正如您所知,这通常不是一个好主意


如果你有删除链接,你一定要把它们放在nofollow上,但我不认为删除数据的链接本质上是坏的。即使您的标记中没有链接,您仍然会通过表单提交或ajax向url发出http请求以删除某些内容。

我不知道是否将从GET请求中删除数据描述为一个必要的安全漏洞(前提是您的应用程序实现了适当的安全性),但正如你所知,这通常不是一个好主意


如果你有删除链接,你一定要把它们放在nofollow上,但我不认为删除数据的链接本质上是坏的。即使您的标记中没有链接,您仍然会通过表单提交或ajax向url发出http请求以删除某些内容。

使用http GET并不是一个安全漏洞,但对于RESTful API来说可能被认为是糟糕的设计。约定是使用HTTP DELETE删除资源。安全漏洞是如果您的API不支持任何身份验证/授权,无论是GET、DELETE、POST还是PUT。然后,任何拥有网络浏览器或Fiddler等工具的人都可以操纵他们本不应该访问的数据。看看这个

您仍然可以使用链接来调用API,但不要使用定义要删除的URL的href的直接链接。而是用一个id像这样定义你的锚

<a href="#" id="aDeleteNote">Delete</a>

如果您想使用Razor指定用于标识要删除的内容的noteid,那么可以将其放在DeleteNoteFunc有权访问的Javascript变量的隐藏字段中。

使用HTTP GET并不是一个安全漏洞,但对于RESTful API来说可能被认为是糟糕的设计。约定是使用HTTP DELETE删除资源。安全漏洞是如果您的API不支持任何身份验证/授权,无论是GET、DELETE、POST还是PUT。然后,任何拥有网络浏览器或Fiddler等工具的人都可以操纵他们本不应该访问的数据。看看这个

您仍然可以使用链接来调用API,但不要使用定义要删除的URL的href的直接链接。而是用一个id像这样定义你的锚

<a href="#" id="aDeleteNote">Delete</a>

如果您想使用Razor指定用于标识要删除的内容的noteid,则可以将其放在DeleteNoteFunc有权访问的Javascript变量的隐藏字段中。

这里提到的是一个名为的漏洞

下面是一个简单的例子

  • 您的网站上有一个GET链接,例如“
    www.example.com/notes/delete/232
  • 用户已登录到您的网站,并具有删除备注232的权限
  • 用户收到来自攻击者的电子邮件,诱使他们访问攻击者的网站
  • 用户通过电子邮件访问网站,但其中一个图像标记的定义如下:“
  • 这会导致浏览器向您的网站发出HTTP请求,发送正确的身份验证cookies,这将导致在用户不知情的情况下删除注释

    现在这不是GET本身的漏洞,但这也是为什么不应使用GET等方法在服务器上进行更改的原因之一

    是的,你是对的,你应该使用POST。POST仍然容易受到与上述类似的攻击,但攻击者要么需要创建标准HTML表单来发布数据,要么必须通过AJAX创建POST。如果您通过HTTP头“
    X-request-With:XMLHttpRequest
    ”并在服务器方法中选中此项,这将有助于防止此攻击,因为此头无法添加到跨域请求中


    如果您想进一步保护此安全性,则应实现,该功能将验证令牌作为POST请求的一部分,以确保请求来自您自己的站点。

    这里您提到的是一个名为的漏洞

    下面是一个简单的例子

  • 您的网站上有一个GET链接,例如“
    www.example.com/notes/delete/232
  • 用户已登录到您的网站,并具有删除备注232的权限
  • 用户收到来自攻击者的电子邮件,诱使他们访问攻击者的网站
  • 用户通过电子邮件访问网站,但其中一个图像标记的定义如下:“
  • 这会导致浏览器向您的网站发出HTTP请求,发送正确的身份验证cookies,这将导致在用户不知情的情况下删除注释

    现在这不是GET本身的漏洞,但这也是为什么不应使用GET等方法在服务器上进行更改的原因之一

    是的,你是对的,你应该使用POST。POST仍然容易受到与上述类似的攻击,但攻击者要么需要创建标准HTML表单来发布数据,要么必须通过AJAX创建POST。如果您通过HTTP头“
    X-request-With:XMLHttpRequest
    ”并在服务器方法中选中此项,这将有助于防止此攻击,因为此头无法添加到跨域请求中

    如果您希望进一步保护此安全性,那么您应该实现,它将验证令牌作为POST请求的一部分,以确保请求来自您自己的站点