Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .Net Core使用注销链接而不是按钮阻止跨域获取请求_Javascript_Asp.net Core_Cross Domain - Fatal编程技术网

Javascript .Net Core使用注销链接而不是按钮阻止跨域获取请求

Javascript .Net Core使用注销链接而不是按钮阻止跨域获取请求,javascript,asp.net-core,cross-domain,Javascript,Asp.net Core,Cross Domain,我知道在_LoginPartial.cshtml中使用按钮而不是锚定链接是为了防止跨域GET请求,但我确实需要使用锚定链接来拥有统一的导航栏链接。我的问题是:若我使用锚标记并使用javascript代码来调用表单提交方法,那个么它会安全并防止跨域GET请求吗?我的意思是替换此代码: <button type="submit">Logout</button> 注销 关于这一点: <a href="javascript:document.getElementById

我知道在_LoginPartial.cshtml中使用按钮而不是锚定链接是为了防止跨域GET请求,但我确实需要使用锚定链接来拥有统一的导航栏链接。我的问题是:若我使用锚标记并使用javascript代码来调用表单提交方法,那个么它会安全并防止跨域GET请求吗?我的意思是替换此代码:

<button type="submit">Logout</button>
注销
关于这一点:

<a href="javascript:document.getElementById('logoutForm').submit()"></a>

使用表单的要点是表单自动包含一个令牌。该令牌可以防止跨站点请求,因为它仅作为实际表单的一部分生成,因此无法从外部访问

只要包含该令牌且该令牌有效,您就可以安全地抵御CSRF。所以是的,通过JavaScript提交表单在这里就可以了

考虑为链接使用适当的
单击
事件,而不是
javascript:
链接:


document.getElementById('logout-link')。addEventListener('click',函数(evt){
evt.preventDefault();
document.getElementById('logoutForm').submit();
});

为了实现统一的导航条链接,无需将按钮更改为链接。如果您使用引导,您可以使按钮看起来像一个链接,如图所示,如果不使用引导,仍然可以

注销

这并不能真正回答问题。我同意你的回答更具体地回答了问题,但他说他想要统一的导航栏链接,我的回答显示了如何做到这一点,而无需使用链接而不是注销按钮。有时人们问的问题有错误的假设,在这种情况下是错误的假设,即只有使用链接才能获得统一的导航。@JoeAudette感谢您抽出时间。我知道bootstrap,可以说我在bootstrap编码方面很专业,但是在这个项目中使用了一个预定义的主题,它非常复杂。我试图做出改变以实现我的目标,但没有成功。顺便说一句,回答我关于跨域GET攻击的问题将增加我的知识,以便在其他项目中使用,而这需要回到学校。这个答案不仅是正确的(事实上也回答了这个问题),而且也是最理想的路径。说你不能正确地设计它并不是走另一条错误道路的好借口。学习如何使用你正在使用的CSS框架(引导),做你的研究,等等。一个按钮可以被设计成你想要的样子。按钮的要点实际上是通过POST提交注销请求,因为GET请求是幂等的,不应该有任何副作用。CSRF只是上面的肉汁。如果您需要一个链接,您可以将按钮样式设置为链接(这确实是最佳路径,因为样式外观是CSS的领域,而不是HTML或JavaScript),或者您可以使用JavaScript在单击链接时提交表单。在这两种情况下,您都应该将请求方法保留为POST,而不是GET。
<button type="submit" class="btn btn-link">Logout</button>