django csrf中间件不能被禁用。 我从我的项目的中间件中评论过,但是由于丢失了CSRF问题,我的login失败了。 我正在从Django主干工作。 如果在中间件中没有启用,CSRF如何引发问题? 我必须禁用它,因为我的站点上有很多POST请求,CSRF只是中断。 有关如何在django主干项目中完全禁用CSRF的任何反馈意见? Django主干的“新”CSRF框架也打破了一个外部网站,正在对我给它的URL(这是一个restful API的一部分)进行POST。我不能将CSRF框架禁用为我刚才说过,我该如何解决这个问题?
这个问题只关于防止跨站点请求伪造攻击。 具体来说就是:通过Origin头部(CORS)的保护和通过CSRF令牌的保护一样好吗? 例: Alice使用浏览器login(使用cookie)“ https://example.com ”。 我假设她使用现代浏览器。 Alice访问“ https://evil.com ”,evil.com的客户端代码对“ https://example.com ”(传统的CSRF场景)执行某种请求。 所以: 如果我们不检查Origin头(服务器端),并且没有CSRF令牌,那么我们有一个CSRF安全漏洞。 如果我们检查一个CSRF令牌,我们是安全的(但有点乏味)。 如果我们检查Origin头文件,那么来自evil.com的客户端代码的请求应该被阻塞,就像使用CSRF令牌时一样 – 除非可以以某种方式为evil.com的代码设置Origin头部。 我知道,如果我们相信W3C规范在所有现代浏览器中都能正确实现,那么XHR就不可能实现这一点(参见例如跨源资源共享的安全性 ),至less不能。 但是其他types的请求呢 – 比如表单提交? 加载脚本/ img / …标签? 或者页面可以用来(合法地)创build请求的其他方式? 或者,也许一些知名的JS黑客? 注:我不是在说 本地应用程序 操纵浏览器, 跨网站脚本错误在example.com的页面, …
configurationSpring Security 3.2后, _csrf.token不绑定到请求或会话对象。 这是弹簧安全configuration: <http pattern="/login.jsp" security="none"/> <http> <intercept-url pattern="/**" access="ROLE_USER"/> <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=1" default-target-url="/index.jsp"/> <logout/> <csrf /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="test" password="test" authorities="ROLE_USER/> </user-service> </authentication-provider> </authentication-manager> login.jsp文件 <form name="f" action="${contextPath}/j_spring_security_check" method="post" > <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> <button id="ingresarButton" name="submit" type="submit" class="right" style="margin-right: 10px;">Ingresar</button> <span> <label for="usuario">Usuario :</label> <input type="text" name="j_username" […]
跨站点请求伪造(CSRF)通常通过以下方法之一进行阻止: 检查引用 – RESTful但不可靠 将令牌插入表单并将令牌存储在服务器会话中 – 不是真正的RESTful 神秘的一次性URIs – 与令牌相同的原因不是RESTful 手动为这个请求发送密码(不是与HTTPauthentication一起使用的caching密码) – RESTful但不方便 我的想法是使用用户秘密,一个神秘但静态的表单id和JavaScript来生成令牌。 <form method="POST" action="/someresource" id="7099879082361234103"> <input type="hidden" name="token" value="generateToken(…)"> … </form> GET /usersecret/john_doe由来自经过validation的用户的JavaScript获取。 回应: OK 89070135420357234586534346这个秘密在概念上是静态的,但可以每天/每小时更改…以提高安全性。 这是唯一的保密的事情。 阅读隐藏的(但静态为所有用户!)formsID与JavaScript,与用户密码一起处理: generateToken(7099879082361234103, 89070135420357234586534346) 将表单连同生成的令牌一起发送到服务器。 由于服务器知道用户密码和表单ID,因此可以在发送之前运行与客户端相同的generateToken函数,并比较两个结果。 只有当两个值相等时,动作才会被授权。 这种方法有什么问题,尽pipe它没有JavaScript不起作用。 附录: 无状态的CSRF保护
我在Angular.js中实现了一个网站,这是一个ASP.NET WebAPI后端。 Angular.js有一些内置的function来帮助防止csrf保护。 在每个http请求中,它将查找名为“XSRF-TOKEN”的cookie并将其作为名为“X-XSRF-TOKEN”的头提交。 这依赖于Web服务器能够在authentication用户之后设置XSRF-TOKEN cookie,然后检查传入请求的X-XSRF-TOKEN标头。 Angular文档指出: 要利用这一点,您的服务器需要在第一个HTTP GET请求中的JavaScript可读会话cookie(称为XSRF-TOKEN)中设置一个令牌。 在随后的非GET请求中,服务器可以validationcookie是否与X-XSRF-TOKEN HTTP标头匹配,因此请确保只有在您的域上运行的JavaScript可以读取令牌。 令牌对于每个用户必须是唯一的,并且必须由服务器validation(以防止JavaScript构成自己的令牌)。 我们build议该令牌是您的网站的身份validationCookie摘要与盐,以增加安全性。 对于ASP.NET WebAPI,我找不到任何这样的好例子,所以我通过各种来源的帮助推出了自己的例子。 我的问题是 – 任何人都可以看到代码的任何错误? 首先我定义了一个简单的助手类: public class CsrfTokenHelper { const string ConstantSalt = "<ARandomString>"; public string GenerateCsrfTokenFromAuthToken(string authToken) { return GenerateCookieFriendlyHash(authToken); } public bool DoesCsrfTokenMatchAuthToken(string csrfToken, string authToken) { return csrfToken == GenerateCookieFriendlyHash(authToken); } private static string GenerateCookieFriendlyHash(string authToken) { using […]
我知道基于cookie的authentication。 可以应用SSL和HttpOnly标志来保护来自MITM和XSS的基于cookie的身份validation。 但是,为了保护CSRF,需要采取更多的特殊措施。 他们只是有点复杂。 ( 参考 ) 最近,我发现JSON Web Token(JWT)作为authentication的解决scheme非常热门。 我知道关于编码,解码和validationJWT的东西。 但是,我不明白为什么一些网站/教程告诉我们如果使用JWT就不需要CSRF保护。 我读了很多,试图总结下面的问题。 我只希望有人能够提供智威汤逊的全貌,并澄清我误解智威汤逊的概念。 如果JWT存储在cookie中,我认为它与基于cookie的authentication相同,除了服务器不需要有会话来validationcookie /令牌。 如果没有采取特殊措施,CSRF仍然存在风险。 JWT是不是存储在cookie中? 如果JWT存储在localStorage / sessionStorage中,那么没有cookie就不需要防止CRSF。 问题是如何将JWT发送到服务器。 我在这里发现build议使用jQuery通过Ajax请求的HTTP头发送JWT。 那么,只有ajax请求可以进行身份validation? 另外,我还发现有更多的博客使用“Authorization header”和“Bearer”来发送JWT。 我不明白博客谈论的方法。 请问有人可以解释更多关于“授权标题”和“承载者”吗? 这是否使JWT通过所有请求的HTTP头传输? 如果是的话,CSRF呢?
当应用程序依赖于无状态身份validation(使用类似HMAC)时,是否有必要使用CSRF保护? 例: 我们有一个单一的页面应用程序(否则我们必须在每个链接上添加标记: <a href="…?token=xyz">…</a> 。 用户使用POST /authvalidation自己。 成功的身份validation服务器将返回一些令牌。 令牌将通过JavaScript存储在单个页面应用程序中的某个variables中。 这个令牌将被用来访问像/admin这样的受限制的URL。 令牌将始终在HTTP头中传输。 没有Http Session,也没有Cookies。 据我所知,应该(?!)不可能使用跨站点攻击,因为浏览器不会存储令牌,因此它不能自动发送到服务器(这就是使用Cookies /会议)。 我错过了什么吗?
AntiForgeryToken和ajax有问题。 我正在使用ASP.NET MVC 3.我尝试了jQuery Ajax调用和Html.AntiForgeryToken()的解决scheme。 使用该解决scheme,令牌现在正在传递: var data = { … } // with token, key is '__RequestVerificationToken' $.ajax({ type: "POST", data: data, datatype: "json", traditional: true, contentType: "application/json; charset=utf-8", url: myURL, success: function (response) { … }, error: function (response) { … } }); 当我删除[ValidateAntiForgeryToken]属性来查看数据(带有令牌)是否作为parameter passing给控制器时,我可以看到它们正在被传递。 但由于某种原因, A required anti-forgery token was not supplied […]
从我目前所了解到的情况来看,令牌的目的是防止攻击者伪造表单提交。 例如,如果一个网站有一个表单,将添加的项目input到您的购物车,并且攻击者可以用您不想要的项目将您的购物车垃圾邮件。 这是有道理的,因为可能有多个有效的购物车forms的input,攻击者所要做的就是知道网站正在销售的物品。 我了解这种情况下的令牌是如何工作和增加安全性的,因为它们确保用户实际填写并按下了添加到购物车中的每个物品的“提交”button。 但是,令牌是否将任何安全性添加到需要用户名和密码的用户login表单中? 由于用户名和密码是非常独特的,攻击者必须知道这两个为了login伪造工作(即使你没有设置令牌),如果攻击者已经知道,他可以login到网站本人。 更不用说,使用户login自己的CSRF攻击无论如何不会有任何实际的目的。 我对CSRF攻击和令牌的理解是否正确? 他们是无用的用户login表单,我怀疑?
我正在做一个使用Rails的单页应用程序。 login和注销Devise控制器使用ajax调用。 我得到的问题是,当我1)login2)注销然后再次login不起作用。 我认为这与CSRF令牌有关,当我退出时它会被重置(尽pipe它不应该是错误的),并且由于它是单页,因此旧的CSRF令牌正在xhr请求中发送,从而重置会话。 更具体的是这个工作stream程: 签到 登出 login(成功201.但打印WARNING: Can't verify CSRF token authenticity服务器日志中的WARNING: Can't verify CSRF token authenticity ) 随后的ajax请求失败401未经授权 刷新网站(此时,页眉中的CSRF更改为其他内容) 我可以login,它的工作,直到我试图退出,并在一次。 任何线索非常感谢! 让我知道如果我可以添加更多的细节。