标签: csrf-protection

防止PHP中不受信任的来源发生注销操作

我在我的网站上有一个动作:

http://mysite.com/User/Logout
Run Code Online (Sandbox Code Playgroud)

这将使当前用户退出他/她的会话.由于这是一个简单的GET请求,恶意用户可以创建指向此页面的链接,甚至可以将此链接放在图像的src属性中,这会强制用户注销.我仍然希望保持注销链接的简单性而不必走得太远,但同时我希望能够防止上述情况发生.

有任何想法吗?

php security xss csrf csrf-protection

5
推荐指数
2
解决办法
1229
查看次数

使用csrf令牌

我对使用生成csrf令牌来保护我的Web应用程序感兴趣.我的问题是如何将该令牌发送回服务器:使用查询参数或http头x-csrf-token?

有什么区别

csrf node.js csrf-protection express

5
推荐指数
1
解决办法
1万
查看次数

Rails 4在哪里存储用于CSRF保护的身份验证令牌?

在我的一个控制器中,我编写以下内容以保护CSRF中的某些页面.

  protect_from_forgery :only => [:foo, :bar]
Run Code Online (Sandbox Code Playgroud)

当我加载URL的对应于foobar,和我查看HTML,我没有看到任何隐藏的输入域或包含任何安全令牌的meta标签,描述在这里.

但是,在测试期间,我确实发现这CSRF对这些页面无效,尽管它对同一应用程序中未受保护的其他页面有效.

那么在哪里Rails 4存储用于验证请求来自原始页面的安全令牌?

请注意,我已经通过阅读Ruby on Rails的安全指南,并从部分上protect_from_forgery,它说

这将自动包含所有表单中的安全令牌和Rails生成的Ajax请求.如果安全令牌与预期的不匹配,则会重置会话.

问题是,启用CSRF保护的页面上的表单中似乎缺少此安全令牌,即使CSRF确实对它们无效.


请注意,此代码来自一个类项目,其中一个目标是执行clickjacking攻击以绕过CSRF项目.我在这里提出的问题与作业的目的正交的.

我只是好奇Rails如何做CSRF.

rails server直接做之后,我找不到安全令牌的相关URL是http://localhost:3000/protected_transfer.

security ruby-on-rails csrf csrf-protection

5
推荐指数
1
解决办法
2114
查看次数

没有会话或数据库的安全CSRF保护?

我正在尝试对HTML登录表单实施安全的CSRF保护,我知道实现CSRF保护的最佳方法是在会话中存储随机csrf_key,但我想将CSRF添加到我的登录和注册表单......而我不知道想为任何匿名的未注册用户存储多个会话...

所以我想创建最好的安全posibble而不使用会话或数据库,只有表单隐藏字段/&一个cookie,登录后我将使用会话csrf保护.

我对secure user_storage的想法只有csrf:

csrf_token = AES(ip + useragent + timestamp + random_data,csrf_aes_site_key)

当csrf_aes_site_key在配置文件中被硬编码时.并且在每次登录/注册后,我将解密AES字符串+ velidate,ip&ua匹配请求ip&ua,时间戳不是太匹配,比如5分钟(如果csrf_timestamp + 18000> = current_ts),random_data只是随机性(并确保同一用户在相同的ts中多次请求时不会获得相同的csrf_token)...

所以...它足够安全,它是一个很好的解决方案吗?如果没有,还有其他建议可以解决这个难题吗?谢谢!

编辑:我刚刚创建的实现,它工作正常,但它是否足够好?

完整示例:https: //github.com/itaiarbel/aes_based_csrf_protection

问题1:用户可以使用相同的令牌为下一个5min的bug获取csrf_token并成功提交给表单吗?如果用户提交多次,我该怎么办?只要不是csrf攻击......

问题2:如果页面打开5分钟,用户将忘记登录,(每5分钟自动重新登录页面?maby将其更改为1小时?)

您是否可以通过此实施发现任何特定的安全风险?或者我可以假设这是一种安全的CSRF保护方式吗?

php security cookies session csrf-protection

5
推荐指数
1
解决办法
2761
查看次数

在Spring Security中自定义CSRF错误页面

通常,当页面一直待到会话到期并且我尝试提交POST操作时,Spring Security生成的CSRF令牌将不匹配服务器的预期值.在这种情况下,错误是预期的结果.

但是,我总是得到默认的Tomcat 403错误,这是非常难看的.它是由安全筛选器抛出的403错误引起的.

但是,我想拦截特定的CSRF错误以执行自定义操作.即,以下操作无效,因为错误比MVC管道早得多

@ExceptionHandler(CsrfException.class)
public String exception(CsrfException ex)
{
    log.error(ex.getMessage(), ex);

    return "redirect:/index.jsp";
}
Run Code Online (Sandbox Code Playgroud)

重定向到索引页面(或其他)似乎是一个很好的解决方案.如何拦截错误的CSRF令牌错误并自定义服务器响应?

spring spring-security csrf-protection

5
推荐指数
1
解决办法
1808
查看次数

移动设备中的InvalidAuthenticityToken错误

我已经在StackOverflow上阅读了关于InvalidAuthenticityToken和protect_from_forgery的多个问题和答案,但没有更明智.

我有一个网站每天都会收到数百个这样的错误.它们似乎主要(仅限于?)来自移动设备,但我只通过样本验证过.

我理解为什么有AuthenticityToken和添加的需要

<%= csrf_meta_tags %>
Run Code Online (Sandbox Code Playgroud)

在application.html(我有)以及在应用程序控制器中有protect_from_forgery.我有csrf_meta_tags和:

protect_from_forgery with: :exception
Run Code Online (Sandbox Code Playgroud)

在我的应用程序控制器中,默认情况下.

我意识到我可以通过删除protect_from_forgery来"解决"这个问题,但这会让我容易受到CSRF攻击,所以这不是真正的解决方案,是吗?对于发生的表单帖子,我可以为protect_from_forgery添加一个"except",但这会让我感到非常脆弱,对吧?

编辑:我尝试使用移动设备访问表单,禁用Cookie并遇到422错误.无法让它导致异常.为我的"结果"函数添加一个例外删除了,但这让我觉得它很脆弱?

Edit2:我在同一页面上有几个表单(例如搜索表单).也许这会影响这个问题?

我现在处于一个我无法拥有它的位置,因为它每天导致数百名用户出错,我无法将其删除,因为我担心它会使我的网站容易受到攻击.

那么,我该怎么办?有一个像样的中间地带?

有什么方法可以改变protect_from_forgery并仍然相信我不会被黑客破坏我的数据库吗?

我没有为网站使用任何API,并且所有错误都来自相同类型的表单.我知道这个问题有一个javascript部分但不是真的如何使用该信息来解决问题.

提前致谢!

我得到的异常示例:

An ActionController::InvalidAuthenticityToken occurred in calculations#result: 

ActionController::InvalidAuthenticityToken 

------------------------------- 
Request: 
------------------------------- 

* URL : http://www.example.com/calculation/result 
* HTTP Method: PUT 
* IP address : 217.214.148.251 
* Parameters : {"utf8"=>"?", "_method"=>"put", "authenticity_token"=>"udnClerrF5UWvg84uaD82TzmPx/vWssv2wN9UPqyn10UwXqbOwa2FBtnZ5Nfo7HPh9xbA2OSrrUNineW50XiYg==", "commit"=>"Calculate", "controller"=>"calculations", "action"=>"result", "id"=>"123"} 
* Timestamp : 2016-08-19 12:11:09 UTC 
* Server : 2696e83c-1538-434d-ab6d-4e16577698d0 
* Rails root : /app 
* Process: 6 

------------------------------- 
Session: 
------------------------------- 

* session id: "42b36aacc78102605cb3365922a550b1" 
* data: {"session_id"=>"42b36aacc78102605cb3365922a550b1", …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails protect-from-forgery csrf-protection

5
推荐指数
1
解决办法
855
查看次数

Rails 5 devise_token_auth无法验证CSRF令牌的真实性

我正在开发一个Rails 5 api项目,由移动客户端使用gem devise_token_auth进行授权.

我清楚警告意味着什么.

第一个问题: 对于api(JSON/XML)响应,CSRF保护应该关闭,对吗?

我在网上搜索了一些似乎CSRF恰好发生在带有cookie的web应用程序上.但是我从rails api文件中读到了这个:

重要的是要记住XML或JSON请求也会受到影响>如果您正在构建API,则应该在ApplicationController中更改伪造保护>方法(默认情况下::: exception):

class ApplicationController < ActionController::Base protect_from_forgery unless: -> { request.format.json? } end

所以我仍然通过这样添加警告:

class ApplicationController < ActionController::Base
  protect_from_forgery unless: -> { request.format.json? }
  include DeviseTokenAuth::Concerns::SetUserByToken
end
Run Code Online (Sandbox Code Playgroud)

第二个问题:如果API不需要CSRF保护,为什么呢

protect_from_forgery unless: -> { request.format.json? }
Run Code Online (Sandbox Code Playgroud)

不起作用?

不确定我是否理解错误.谢谢!

ruby-on-rails csrf-protection

5
推荐指数
1
解决办法
3709
查看次数

Spring Security中的相同站点Cookie

在Spring Security中可以设置Same-site Cookie标志吗?请参阅:https : //tools.ietf.org/html/draft-west-first-party-cookies-07 ,如果没有,请问是否有增加支持的路线图?某些浏览器(例如Chrome)已经支持。TH

security cookies spring-security jsessionid csrf-protection

5
推荐指数
5
解决办法
4253
查看次数

如何在静态站点上防范CSRF?

我有一个静态网站,由CDN提供服务,该网站通过AJAX与API进行通信。如何防范CSRF?

由于我无法控制静态网站的服务方式,因此当有人加载我的静态网站时,我无法生成CSRF令牌(并将令牌插入表单或随AJAX请求发送)。我可以创建一个GET端点来检索令牌,但是似乎攻击者可以简单地访问该端点并使用它提供的令牌?

有没有有效的方法来防止使用此堆栈的CSRF?


其他详细信息:身份验证在此处完全分开。我想要CSRF保护的一些API请求是经过身份验证的终结点,而一些是公共POST请求(但我想确认它们来自我的网站,而不是其他人的)

security ajax csrf csrf-protection

5
推荐指数
1
解决办法
1543
查看次数

在Cookie中存储Bearer令牌的安全性

我的SPA使用React作为前端,使用laravel API作为后端。

当用户登录时(通过axios和api),api将返回访问(承载者令牌)作为响应。我使用react-cookie框架将访问令牌作为cookie存储在浏览器中。该cookie将被读取并用于以后的任何请求。

这是正确的方法吗?Cookie数据不只是浏览器中可以被任何攻击者轻易获得的东西吗?由于它只是一个文件,因此可以放在计算机的某个位置。

是什么阻止了攻击者获取该Cookie,冒充该用户并开始执行需要身份验证的操作?

该令牌的使用寿命为1年。仅在用户每次登录时才会刷新。我知道,如果将寿命设置得较短,它将更加安全。但是,这是否意味着用户将不得不不断登录?

-----更新-----

我不确定所提供的解决方案是否回答了我的问题。SPA应用程序是基于前端的,并且该请求可以来自任何地方,例如邮递员,移动应用程序或希望与我的后备服务器通信的任何第三方设备。因此,这些设备需要一种在本地存储一些访问令牌以用于将来任何请求的方法。

我知道这可能发生的唯一方法是服务器将一些身份验证令牌发送给请求者,并将其存储在某个地方以用于下一个请求。

在这种情况下,我不确定CSRF令牌或其他任何方式是否可以帮助我解决问题?

就像facebook一样,如果我清除缓存,则必须重新登录。这意味着facebook正在我的位置计算机上存储一些东西,以便下次可以自动对我进行身份验证

cookies csrf csrf-protection single-page-application bearer-token

5
推荐指数
2
解决办法
1891
查看次数