标签: csrf

JSON Web服务是否容易受到CSRF攻击?

我正在构建一个专门为其请求和响应内容使用JSON的Web服务(即,没有表单编码的有效负载).

如果以下情况属实,Web服务是否容易受到CSRF攻击?

  1. POST例如,没有顶级JSON对象的任何请求{"foo":"bar"}将被拒绝400.例如,POST具有该内容的请求42将因此被拒绝.

  2. POST具有除内容类型之外的任何请求application/json将被拒绝400.例如,POST具有内容类型的请求application/x-www-form-urlencoded将因此被拒绝.

  3. 所有GET请求都是安全的,因此不会修改任何服务器端数据.

  4. 客户端通过会话cookie进行身份验证,Web服务在通过带有JSON数据的POST提供正确的用户名/密码对后为其提供,例如{"username":"user@example.com", "password":"my password"}.

补充问题:是PUTDELETE要求日益容易受到CSRF?我问,因为似乎大多数(所有?)浏览器都不允许HTML表单中的这些方法.

编辑:添加了第4项.

编辑:到目前为止,有很多好的评论和答案,但没有人提供过这种Web服务易受攻击的特定CSRF攻击.

security http csrf

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

Angular对抗Asp.Net WebApi,在服务器上实现CSRF

我正在Angular.js中实现一个网站,它正在攻击ASP.NET WebAPI后端.

Angular.js具有一些内置功能,可以帮助防止csrf.在每个http请求中,它将查找名为"XSRF-TOKEN"的cookie并将其作为名为"X-XSRF-TOKEN"的标头提交.

这依赖于Web服务器能够在对用户进行身份验证之后设置XSRF-TOKEN cookie,然后检查X-XSRF-TOKEN标头以获取传入请求.

角文档状态:

要利用这一点,您的服务器需要在第一个HTTP GET请求中在名为XSRF-TOKEN的JavaScript可读会话cookie中设置令牌.在后续的非GET请求中,服务器可以验证cookie是否与X-XSRF-TOKEN HTTP标头匹配,因此请确保只有您域上运行的JavaScript才能读取令牌.令牌对于每个用户必须是唯一的,并且必须由服务器验证(以防止JavaScript组成自己的令牌).我们建议令牌是您网站的身份验证cookie的摘要,以增加安全性.

我找不到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 (var sha = SHA256.Create())
        {
            var computedHash = sha.ComputeHash(Encoding.Unicode.GetBytes(authToken + ConstantSalt));
            var cookieFriendlyHash = HttpServerUtility.UrlTokenEncode(computedHash);
            return cookieFriendlyHash;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在授权控制器中使用以下方法,并在调用FormsAuthentication.SetAuthCookie()后调用它:

    // http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks
    // http://docs.angularjs.org/api/ng.$http
    private void SetCsrfCookie() …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net csrf asp.net-web-api angularjs

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

Rails:csrf_meta_tag如何工作?

我是一名PHP开发人员,通过阅读Michael Hartl的教程来学习Ruby on Rails .以下是本书的引用,指的是csrf_meta_tag:

... Rails方法csrf_meta_tag[防止]跨站点请求伪造(CSRF),一种恶意Web攻击.不要担心细节(我没有); 只知道Rails正在努力保证您的应用程序的安全.

问题是,我真的很好奇.插入csrf-paramcsrf-token元标记如何阻止CSRF?我试过谷歌搜索,但找不到任何东西.

ruby-on-rails csrf

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

Django CSRF框架无法禁用并且正在破坏我的网站

django csrf中间件无法禁用.我从我的项目中间件中评论过它,但由于缺少CSRF问题,我的登录失败了.我正在使用Django主干.如果在中间件中未启用CSRF,CSRF如何导致问题?

我必须禁用它,因为我的网站上有很多POST请求,CSRF刚刚中断.有关如何在django主干项目中完全禁用CSRF的任何反馈?

来自Django主干的"新'CSRF框架也破坏了一个外部网站,它正在进入我正在给它们的URL上进行POST(这是一个宁静的API的一部分.)我无法禁用CSRF框架我之前说过,我该如何解决这个问题?

django csrf

57
推荐指数
4
解决办法
3万
查看次数

JSF中的CSRF,XSS和SQL注入攻击防范

我有一个基于JSF的Web应用程序,MySQL作为DB.我已经实现了代码来防止我的应用程序中出现CSRF.

现在,由于我的底层框架是JSF,我想我不必处理XSS攻击,因为它已经被处理了UIComponent.我没有在任何视图页面中使用任何JavaScript.即使我使用,我真的需要实现代码来防止XSS攻击?

对于DB,我们在所有数据库交互中使用预准备语句和存储过程.

是否还需要处理其他任何事情以防止这3种常见攻击?我已经通过了OWASP网站和他们的备忘单.

我是否需要处理任何其他潜在的攻击媒介?

xss jsf sql-injection csrf owasp

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

在ajax提交上禁用symfony 2 csrf令牌保护

我正在建立一个移动应用程序通过webservices与我的symfony2应用程序交谈我无法找到一种方法来禁用特定控制器/操作上的csrf保护

我想将注册数据发布到此操作并使用sf2表单验证.我不会在我的移动应用程序中调用该表单

无法更改操作中的容器参数,因为它是冻结参数而抛出异常...

我不想为整个应用程序禁用表单保护

任何线索?

谢谢 !

更新:使用symfony 2.1.x

/**
 * {@inheritdoc}
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'csrf_protection'   => false,
    ));
}
Run Code Online (Sandbox Code Playgroud)

ajax csrf symfony

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

PHPF中的CSRF(跨站点请求伪造)攻击示例和预防

我有一个网站,人们可以这样投票:

http://mysite.com/vote/25
Run Code Online (Sandbox Code Playgroud)

这将对项目25进行投票.我想只为注册用户提供此选项,并且只有在他们想要这样做时才可以.现在我知道有人在网站上忙碌,有人给他们这样的链接:

http://mysite.com/vote/30
Run Code Online (Sandbox Code Playgroud)

然后投票将是他在项目上的位置,而他不想这样做.

我已经阅读了OWASP网站上解释,但我真的不明白

这是CSRF的一个例子,我该如何防止这种情况发生.我能想到的最好的事情就是像哈希一样在链接中添加一些内容.但是,在所有链接的末尾添加一些内容会非常恼人.没有其他方法可以做到这一点.

另一件事可能有人可能会给我一些其他的例子,因为该网站对我来说似乎是相当的神话.

php csrf owasp

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

使用PUT或DELETE方法可以实现CSRF吗?

使用PUT或DELETE方法可以实现CSRF吗?或者PUT或DELETE的使用是否会阻止CSRF?

security csrf

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

警告:在API开发的情况下无法验证CSRF令牌的真实性

我现在正在使用Ruby on Rails 开发Web API.当Rails应用程序收到没有任何csrf令牌的POST请求时,将发生以下错误消息.因为该应用没有视图.

WARNING: Can't verify CSRF token authenticity
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何在这种情况下安全地逃避csrf令牌检查?

非常感谢你提前.

ruby api csrf token ruby-on-rails-3

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

Laravel捕获TokenMismatchException

可以使用try catch块捕获TokenMismatchException吗?我希望它显示实际页面并显示错误消息,而不是显示显示"VerifyCsrfToken.php第46行中的TokenMismatchException ..."的调试页面.

我对CSRF没有任何问题,我只是希望它仍然显示页面而不是调试页面.

复制(使用firefox):步骤:

  1. 打开页面(http://example.com/login)
  2. 清除Cookie(域,路径,会话).我在这里使用web开发人员工具栏插件.
  3. 提交表格.

实际结果:"哎呀,看起来出了问题"页面显示.预期结果:仍显示登录页面,然后传递"令牌不匹配"或其他错误.

请注意,当我清除cookie时,我没有刷新页面以使令牌生成新密钥并强制它出错.

更新(增加表格):

        <form class="form-horizontal" action="<?php echo route($formActionStoreUrl); ?>" method="post">
        <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>" />
        <div class="form-group">
            <label for="txtCode" class="col-sm-1 control-label">Code</label>
            <div class="col-sm-11">
                <input type="text" name="txtCode" id="txtCode" class="form-control" placeholder="Code" />
            </div>
        </div>
        <div class="form-group">
            <label for="txtDesc" class="col-sm-1 control-label">Description</label>
            <div class="col-sm-11">
                <input type="text" name="txtDesc" id="txtDesc" class="form-control" placeholder="Description" />
            </div>
        </div>
        <div class="form-group">
            <label for="cbxInactive" class="col-sm-1 control-label">Inactive</label>
            <div class="col-sm-11">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" name="cbxInactive" id="cbxInactive" value="inactive" />&nbsp;
                        <span …
Run Code Online (Sandbox Code Playgroud)

php exception-handling csrf laravel laravel-5

49
推荐指数
3
解决办法
4万
查看次数