标签: csrf-protection

CSRF保护问题

我目前正在将CSRF保护实施到我的框架(PHP)中.

不过我想知道:

攻击者是否有可能将我的页面加载到(隐藏的)iframe(获取令牌)并使用JavaScript更改某些数据?

之后提交表格?

php security csrf csrf-protection

9
推荐指数
1
解决办法
633
查看次数

Struts2中的文件上传以及Spring CSRF令牌

我用,

  • Spring Framework 4.0.0 RELEASE(GA)
  • Spring Security 3.2.0 RELEASE(GA)
  • Struts 2.3.16

其中,我使用内置安全令牌来防范CSRF攻击.

<s:form namespace="/admin_side"
        action="Category"
        enctype="multipart/form-data"
        method="POST"
        validate="true"
        id="dataForm"
        name="dataForm">

    <s:hidden name="%{#attr._csrf.parameterName}"
              value="%{#attr._csrf.token}"/>
</s:form>
Run Code Online (Sandbox Code Playgroud)

它是其中CSRF令牌是不可用的,除非春季安全多部分请求MultipartFilter连同MultipartResolver被适当地配置成使得所述多请求由弹簧处理.

MultipartFilterin web.xml配置如下.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
            /WEB-INF/spring-security.xml
        </param-value>
    </context-param>

    <filter>
        <filter-name>MultipartFilter</filter-name>
        <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
    </filter>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>MultipartFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>AdminLoginNocacheFilter</filter-name>
        <filter-class>filter.AdminLoginNocacheFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>AdminLoginNocacheFilter</filter-name>
        <url-pattern>/admin_login/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>NoCacheFilter</filter-name>
        <filter-class>filter.NoCacheFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>NoCacheFilter</filter-name>
        <url-pattern>/admin_side/*</url-pattern> …
Run Code Online (Sandbox Code Playgroud)

spring struts2 csrf spring-security csrf-protection

9
推荐指数
1
解决办法
4587
查看次数

Spring MVC中的CSRF(跨站点请求伪造)保护

我在春天的这个CSRF(跨站点请求伪造)保护中很少混淆.不,我有我的jsp和我的控制器和一个Web服务.我想要做的是在Web服务级别验证令牌,如果令牌匹配,则运行Web服务(在我的情况下执行数据库插入)

JSP文件

    <form:input type="text" class="form-control" path="mName" />

    <input type="hidden" name="${_csrf.parameterName}"
        value="${_csrf.token}" />

    <div class="form-action">
        <input type="submit" value="Save" class="btn btn-primary" />
    </div>
</form:form>
Run Code Online (Sandbox Code Playgroud)

我也插入了隐藏标签.现在我该怎么做来验证这个令牌.我在那里迷路了.

在控制器类中,我获取从表单到对象的值,并调用Web ervise来保存数据

@RequestMapping(method = RequestMethod.POST)
  public String processForm(@ModelAttribute(value = "userForm") @Valid UserForm userForm, BindingResult result, ModelMap model) {      

   //call the web service
  }
Run Code Online (Sandbox Code Playgroud)

java spring-mvc csrf spring-security csrf-protection

9
推荐指数
2
解决办法
2万
查看次数

当CSRF与Spring Security集成时,会话超时导致Spring MVC中的Access Denied

我在Spring MVC项目中使用Spring Security集成了CSRF令牌.使用CSRF令牌一切正常,令牌将从客户端发送到服务器端.

我已经改变了我的logout进程,使其成为POST发送CSRF令牌的方法,并且其工作正常.

发生会话超时时我遇到问题,需要将其重定向到弹出默认注销URL,但它会为我Access Denied提供该URL.

如何覆盖此行为.

我在安全配置文件中包含以下行

   <http>
         //Other config parameters
        <csrf/>
   </http>
Run Code Online (Sandbox Code Playgroud)

如果有人需要更多信息,请告诉我.

spring spring-mvc spring-security csrf-protection

9
推荐指数
1
解决办法
6219
查看次数

为什么浏览器允许CSRF?

我对网络安全性很陌生,当我阅读更多关于不同攻击媒介的内容时,我的头脑很难说它们首先被允许.这就像网络设计的破坏安全模型一样容易受到攻击.

我也对模糊和不精确的信息感到惊讶.例如,起初单原始策略听起来不错,然后我读到它只适用于XHR,哦,顺便说一句,实际上并没有阻止XHR跨源POST,这是典型的CSRF攻击.很高兴我继续读.

还有一个Origin头,服务器可以使用它来确保请求来自正确的位置 - 但是oops,它在浏览器中设置不一致,如果没有设置,你不能确定它是否是是因为同源请求,还是某些浏览器没有得到它的请求类型(可能是IMG标签?).继续阅读.

因此,正确的方法似乎是在会话cookie中设置CSRF令牌,并将该令牌添加到表单/链接,然后在提交时将它们与服务器端进行比较.从理论上讲(并且为了这个问题而排除所有XSS攻击),来自另一个选项卡的CSRF尝试可能会对包含cookie的表单发出POST请求,但没有将表单输入元素设置为匹配令牌(因为它无法从cookie中读取令牌,因此服务器将拒绝该请求.工作但kludgy,并确保你永远不会忘记检查!

记住这一想法一秒钟,这是我的问题 - 为什么浏览器在一个请求中发送会话cookie,该请求来自不是cookie的起源的页面?

我的意思是,浏览器会拒绝将Cookie发送不同的域名,但是很高兴不同的来源发送它们?如果他们没有,会破碎吗?它是否是对CSRF的强大防御,只需要服务器做他们正在做的事情 - 检查有效的会话cookie?

编辑:也许这是改善情况的尝试?https://tools.ietf.org/html/draft-west-origin-cookies-01

security csrf csrf-protection web

9
推荐指数
1
解决办法
842
查看次数

Symfony2:记住我的身份验证时,CSRF令牌无效

我有用Symfony 2.8.11和FosUserBundle 2.0.0-beta1编写的应用程序.用户可以通过VPN或基本身份验证连接到站点.大多数情况下,他们在Windows 7上使用Internet Explorer 11.其中一些在站点内以随机形式遇到无效的CSRF令牌问题.问题是用户无法提交表单,即使刷新页面几次也是如此.

我怀疑问题是由日志中的会话持续刷新引起的:

{
    "created":1483610056, 
    "lastUsed":1483610056
} ["csrf","session_times"] []
Run Code Online (Sandbox Code Playgroud)

此外,我怀疑它是由记住我令牌的身份验证引起的(每个问题都已被该令牌验证):

[2017-01-05 10:54:16] security.DEBUG: Remember-me cookie detected. [] []
[2017-01-05 10:54:16] security.INFO: Remember-me cookie accepted. [] []
[2017-01-05 10:54:16] security.DEBUG: Populated the token storage with a remember-me token. [] []
Run Code Online (Sandbox Code Playgroud)

我的安全配置:

...
main:
    pattern: ^/
    form_login:
        provider: fos_userbundle
        csrf_token_generator: security.csrf.token_manager
        # if you are using Symfony < 2.8, use the following config instead:
        # csrf_provider: form.csrf_provider
    logout:       true
    anonymous:    true
    remember_me:
        name: "%session_cookie_remember_name%"
        domain: "%session_cookie_domain%"
        key:      "%secret%" …
Run Code Online (Sandbox Code Playgroud)

php session symfony csrf-protection fosuserbundle

9
推荐指数
1
解决办法
954
查看次数

JSON API和CSRF

我正在开发一个Web API.身份验证是通过cookie.所有端点都JSON在请求正文中接收参数.

我是否需要实施CSRF token保护它们?这怎么可以被利用?是否可以通过普通<form>元素发送JSON ?

攻击者有可能拥有这样的东西吗?

<form type="application/json" method="POST">
     <input name="json" value="{ my json code here }">
     <input type="submit">Send</input>
<form>
Run Code Online (Sandbox Code Playgroud)

api-design csrf csrf-protection

9
推荐指数
1
解决办法
838
查看次数

仅使用nginx进行简单的CSRF保护

我有一个nginx服务器提供纯HTML和JS文件.

然后,js代码从API服务器调用各种REST API到GET/POST数据.

如果nginx收到对/ api/location的请求,它会将请求转发给另一个处理所有API的服务器.这个api服务器是用Ruby on Rails构建的.

由于我的所有纯HTML页面都是由nginx直接提供的,因此在呈现时我无法进行服务器端会话.

我该怎么做才能防止CSRF攻击?

architecture security xss csrf csrf-protection

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

CSRF - 使用 Django 后端从 chrome 扩展执行 ajax 请求时的引用

我正在使用最新版本的 Django 和 Django Rest Framework。我的 Web 应用程序提供了一个当前仅由前端使用的 API。

我正在使用相同的 API 路由创建 chrome 扩展。

当我使用本地服务器runserver 命令时,我没有问题。当服务器在 HTTPS 后面运行时,我始终有 403 错误。

{"detail":"CSRF Failed: Referer checking failed - no Referer."}
Run Code Online (Sandbox Code Playgroud)

我使用的视图如下:

@method_decorator(csrf_exempt, name='dispatch')
class ObtainAuthToken(APIView):
    permission_classes = (AllowAny,) #maybe not needed in your case

    def post(self, request):
        username = request.POST['username'].lower()
        password = request.POST['password']
        user = authenticate(username=username, password=password)

        payload = dict()

        if user is not None:

            token, created = Token.objects.get_or_create(user=user)

            payload['token'] = token.key
            payload ["success"] = True

        else:
            payload['error'] = "Credentials …
Run Code Online (Sandbox Code Playgroud)

django ajax google-chrome-extension django-csrf csrf-protection

8
推荐指数
0
解决办法
630
查看次数

为什么Rails中的CSRF令牌不会阻止多个选项卡正常工作?

在阅读了CSRF保护在Rails中的工作原理后,我尝试通过执行以下操作来触发CSRF保护:

注意:我们正在使用基于cookie的会话。

  1. 访问登录页面。检查meta => abc123中的CSRF令牌
  2. 打开第二个浏览器选项卡,然后访问相同的登录页面。meta中的CSRF令牌不同=> def456
  3. 返回第一个标签。
  4. 提交登录凭据。

我期望这会失败,因为第二个选项卡生成了一个新的,不同的CSRF令牌。提交登录表单时,提交给服务器的令牌不应该是旧的,陈旧的令牌吗?

但是,这确实有效:

  1. 访问登录页面。检查meta => abc123中的CSRF令牌
  2. 打开第二个浏览器选项卡,然后访问相同的登录页面。meta中的CSRF令牌不同=> def456
  3. 返回第一个标签。
  4. 提交登录凭据。
  5. 注销(清除会话)
  6. 转到第二个选项卡,然后提交登录。

在这种情况下,我得到一个InvalidAuthenticityToken异常。为什么?

ruby-on-rails csrf-protection

8
推荐指数
1
解决办法
1494
查看次数