javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

php-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 class="check"></span>
                    </label>
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-12">
                <button type="submit" class="btn btn-primary pull-right"><i class="fa fa-save fa-lg"></i> Save</button>
            </div>
        </div>
    </form>

这里没什么好看的。 只是普通形式。 就像我说的一样,表格工作正常。 就在我说完上述步骤时,由于令牌已过期而导致错误。 我的问题是,表格是否应该这样操作? 我的意思是,每当我清除cookie和会话时,也需要重新加载页面吗? CSRF在这里是这样工作的吗?

trans by 2020-02-16T06:19:03Z

ruby-警告:如果进行API开发,则无法验证CSRF令牌的真实性

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

WARNING: Can't verify CSRF token authenticity

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

提前非常感谢您。

trans by 2020-02-14T11:07:56Z

安全-CSRF是否可以通过PUT或DELETE方法使用?

CSRF是否可以通过PUT或DELETE方法使用? 还是使用PUT或DELETE可以防止CSRF?

trans by 2020-02-11T18:26:42Z

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

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

http://mysite.com/vote/25

这将对项目25进行投票。我只想让已注册的用户可以使用此功能,并且仅当他们想要这样做时才可以使用。 现在我知道有人在网站上忙碌时,有人给他们这样的链接:

http://mysite.com/vote/30

那么投票将成为他不希望这样做的地方。

我已经在OWASP网站上阅读了说明,但我不太理解

这是CSRF的示例,如何防止这种情况发生? 我能想到的最好的事情就是在链接中添加一些内容,例如哈希。 但是,在所有链接的末尾放置一些内容将非常令人讨厌。 有没有其他方法可以做到这一点。

有人可能会给我另一个例子,因为这个网站对我来说似乎很陌生。

trans by 2020-02-04T02:44:08Z

在Ajax提交上禁用symfony2 csrf令牌保护

我正在构建一个通过webservices与symfony2应用程序对话的移动应用程序我找不到在特定控制器/操作上禁用CSRF保护的方法

我想将注册数据发布到此操作并使用sf2表单验证。 我没有在我的移动应用中致电该表格

无法在操作中更改容器参数,因为它是冻结参数而引发异常...

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

有什么线索吗?

谢谢 !

更新:使用symfony 2.1.x

/**
 * {@inheritdoc}
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'csrf_protection'   => false,
    ));
}
trans by 2020-01-11T06:04:54Z

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

我有一个在JSF上构建的Web应用程序,其中MySQL作为数据库。 我已经在我的应用程序中实现了防止CSRF的代码。

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

对于数据库,我们在所有数据库交互中都使用准备好的语句和存储过程。

是否需要采取其他措施来防止这三种常见攻击?我已经浏览过OWASP网站及其备忘单。

我是否需要照顾其他潜在的攻击媒介?

trans by 2019-12-31T06:43:45Z

无法禁用Django CSRF框架,这打破了我的建议

django csrf中间件无法禁用。 我已经从我的项目的中间件中将其注释掉,但是由于缺少CSRF问题,导致登录失败。 我正在使用Django主干。 如果未在中间件中启用CSRF,如何引起问题?

我必须禁用它,因为CSRF刚刚中断了我站点上的许多POST请求。 关于如何在django主干项目中完全禁用CSRF的任何反馈?

Django主干中的“新” CSRF框架也破坏了一个外部站点,该站点正在进入并在我为其提供的URL上执行POST(这是一个宁静的API的一部分。)我不能禁用CSRF框架,因为 我之前说过,该如何解决?

trans by 2019-11-10T06:10:59Z

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

我正在构建一个仅将JSON用于其请求和响应内容的Web服务(即没有表单编码的有效负载)。

如果满足以下条件,Web服务是否容易受到CSRF攻击?

  1. 没有顶级JSON对象(例如2557880287225185185280)的任何POST请求都将被400拒绝。例如,具有内容POSTDELETE请求将被拒绝。

  2. 具有DELETE以外的内容类型的任何PUT请求都将被拒绝400。例如,具有内容类型application/x-www-form-urlencodedPOST请求将因此被拒绝。

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

  4. 客户端通过会话Cookie进行身份验证,在客户端通过POST使用JSON数据(例如, PUT

辅助问题:PUTDELETE请求是否容易受到CSRF的攻击? 我问是因为似乎大多数(全部?)浏览器都不允许HTML形式的这些方法。

编辑:添加了项目#4。

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

trans by 2019-10-06T22:01:48Z

安全性-如何使用PHP正确添加CSRF令牌

我正在尝试为我的网站上的表单添加一些安全性。 一种形式是使用AJAX,另一种形式是简单的“与我们联系”形式。 我正在尝试添加CSRF令牌。 我遇到的问题是令牌有时仅在HTML“值”中显示。 其余时间,该值为空。 这是我在AJAX表单上使用的代码:

PHP:

if (!isset($_SESSION)) {
    session_start();
$_SESSION['formStarted'] = true;
}
if (!isset($_SESSION['token']))
{$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;

}

HTML

 <form>
//...
<input type="hidden" name="token" value="<?php echo $token; ?>" />
//...
</form>

有什么建议?

trans by 2019-09-26T17:54:24Z

rails - 对于json设计请求,“警告:无法验证CSRF令牌真实性”

如何检索CSRF令牌以传递JSON请求?

我知道出于安全原因,Rails正在检查所有请求类型(包括JSON / XML)上的CSRF令牌。

我可以放入我的控制器<%= form_authenticity_token %>,但我会失去CSRF保护(不建议:-))。

这个类似的(仍未被接受的)答案暗示

使用<%= form_authenticity_token %>检索令牌

问题是如何? 我是否需要先对我的任何页面进行调用以检索令牌,然后使用Devise进行真正的身份验证? 或者它是一个一次性的信息我可以从我的服务器获得然后一致地使用(直到我在服务器本身手动更改它)?

trans by 2019-09-18T21:13:20Z

spring - 在请求参数'_csrf'或标题'X-CSRF-TOKEN'上找到无效的CSRF令牌'null'

配置Spring Security 3.2后,_csrf.token未绑定到请求或会话对象。

这是spring security配置:

<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" id="u" class="" value=''/>
    </span>
    <span>
        <label for="clave">Contrase&ntilde;a :</label>

        <input type="password"
               name="j_password"
               id="p"
               class=""
               onfocus="vc_psfocus = 1;"
               value="">
    </span>
</form>

它呈现下一个HTML:

<input type="hidden" name="" value="" />

结果是403 HTTP状态:

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

UPDATE在一些调试之后,请求对象从DelegatingFilterProxy中获得良好的形式,但是在CoyoteAdapter的第469行中它执行request.recycle(); 删除所有属性......

我使用JDK 1.7在Tomcat 6.0.36,7.0.50中进行测试。

我没有理解这种行为,而不是,如果有人指出我使用与CSRF一起工作的Spring Security 3.2的应用程序样本战争的方向,那么这是可能的。

trans by 2019-09-17T04:22:42Z

Django Rest Framework删除cs

我知道有关于Django Rest Framework的答案,但我无法找到解决问题的方法。

我有一个具有身份验证和一些功能的应用程序。我添加了一个新的应用程序,它使用Django Rest Framework。 我想只在这个应用程序中使用该库。 我也想发出POST请求,我总是收到这个回复:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

我有以下代码:

# urls.py
from django.conf.urls import patterns, url


urlpatterns = patterns(
    'api.views',
    url(r'^object/$', views.Object.as_view()),
)

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt


class Object(APIView):

    @csrf_exempt
    def post(self, request, format=None):
        return Response({'received data': request.data})

我想添加API而不影响当前的应用程序。所以我的问题是如何才能为此应用禁用CSRF?

trans by 2019-09-16T10:19:28Z

javascript - 使用CORS Origin头与CSRF令牌进行CSRF保护

此问题仅针对防止跨站点请求伪造攻击。

具体来说:通过Origin头(CORS)保护和通过CSRF令牌保护一样好吗?

例:

  • Alice使用她的浏览器登录(使用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就不可能实现这一点(参见例如跨源资源共享的安全性),至少不是这样。

但是其他类型的请求呢 - 例如 表格提交? 加载脚本/ img / ...标签? 或者页面可以用来(合法地)创建请求的任何其他方式? 或者也许是一些已知的JS黑客攻击?

注意:我不是在谈论

  • 原生应用,
  • 操纵浏览器,
  • example.com页面中的跨站点脚本错误,
  • ...
trans by 2019-09-01T11:49:22Z

在rails 3中关闭CSRF令牌

我有一个rails应用程序,为iPhone应用程序提供一些api。我希望能够简单地在资源上发布,而无需专注于获取正确的csrf令牌。我尝试了一些我在stackoverflow中看到的方法,但似乎它们不再适用于rails 3。感谢你们对我的帮助。

trans by 2019-08-04T07:30:24Z

使用无状态(=无会话)身份验证时,CSRF令牌是否必要?

当应用程序依赖无状态身份验证(使用HMAC之类的东西)时,是否有必要使用CSRF保护?

例:

  • 我们有一个单页应用程序(否则我们必须在每个链接上附加令牌:/admin

  • 用户使用/admin验证自己。验证成功后,服务器将返回一些令牌。

  • 令牌将通过JavaScript存储在单页面应用程序内的某个变量中。

  • 此令牌将用于访问受限制的URL,如/admin

  • 令牌将始终在HTTP标头内传输。

  • 没有Http会话,没有Cookies。

据我所知,应该(?!)不可能使用跨站点攻击,因为浏览器不会存储令牌,因此它无法自动将其发送到服务器(这是什么? 使用Cookies / Session时会发生这种情况。

我错过了什么吗?

trans by 2019-07-23T21:38:39Z

安全性 - 在浏览器中存储JWT的位置? 如何防范CSRF?

我知道基于cookie的身份验证。 可以应用SSL和HttpOnly标志来保护来自MITM和XSS的基于cookie的身份验证。 但是,需要采取更多特殊措施以保护其免受CSRF的影响。 它们有点复杂。 (参考)

最近,我发现JSON Web Token(JWT)作为身份验证的解决方案非常热门。 我知道有关编码,解码和验证JWT的内容。 但是,我不明白为什么有些网站/教程在使用JWT时不需要CSRF保护。 我已经阅读了很多,并试图总结下面的问题。 我只是希望有人可以提供JWT的全貌并澄清我对JWT误解的概念。

  1. 如果JWT存储在cookie中,我认为它与基于cookie的身份验证相同,只是服务器不需要有会话来验证cookie /令牌。 如果没有实施特殊措施,CSRF仍存在风险。 是不是JWT存储在cookie中?

  2. 如果JWT存储在localStorage / sessionStorage中,那么没有cookie就不需要防止CRSF。 问题是如何将JWT发送到服务器。 我发现这里建议使用jQuery通过ajax请求的HTTP头发送JWT。 那么,只有ajax请求才能进行身份验证吗?

  3. 此外,我发现还有一个博客节目使用&#34;授权标题&#34; 和#34; Bearer&#34; 发送JWT。 我不明白博客谈论的方法。 有人可以解释更多关于&#34;授权标题&#34; 和#34;持票人&#34;? 这是否使所有请求的HTTP头传输JWT? 如果是的话,CSRF怎么样?

trans by 2019-07-05T02:57:10Z

javascript - Angular对抗Asp.Net WebApi,在s上实现CSRF

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

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

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

Angular文档指出:

要利用这一点,您的服务器需要在第一个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;
        }
    }
}

然后我在授权控制器中使用以下方法,并在调用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()
    {
        var authCookie = HttpContext.Current.Response.Cookies.Get(".ASPXAUTH");
        Debug.Assert(authCookie != null, "authCookie != null");
        var csrfToken = new CsrfTokenHelper().GenerateCsrfTokenFromAuthToken(authCookie.Value);
        var csrfCookie = new HttpCookie("XSRF-TOKEN", csrfToken) {HttpOnly = false};
        HttpContext.Current.Response.Cookies.Add(csrfCookie);
    }

然后我有一个自定义属性,我可以添加到控制器,使他们检查csrf标头:

public class CheckCsrfHeaderAttribute : AuthorizeAttribute
{
    //  http://stackoverflow.com/questions/11725988/problems-implementing-validatingantiforgerytoken-attribute-for-web-api-with-mvc
    protected override bool IsAuthorized(HttpActionContext context)
    {
        // get auth token from cookie
        var authCookie = HttpContext.Current.Request.Cookies[".ASPXAUTH"];
        if (authCookie == null) return false;
        var authToken = authCookie.Value;

        // get csrf token from header
        var csrfToken = context.Request.Headers.GetValues("X-XSRF-TOKEN").FirstOrDefault();
        if (String.IsNullOrEmpty(csrfToken)) return false;

        // Verify that csrf token was generated from auth token
        // Since the csrf token should have gone out as a cookie, only our site should have been able to get it (via javascript) and return it in a header. 
        // This proves that our site made the request.
        return new CsrfTokenHelper().DoesCsrfTokenMatchAuthToken(csrfToken, authToken);
    }
}

最后,我在用户注销时清除Csrf令牌:

HttpContext.Current.Response.Cookies.Remove("XSRF-TOKEN");

任何人都可以发现任何明显(或不那么明显)的问题吗?

trans by 2019-06-21T18:01:34Z

php - “页面由于不活动而过期” - Laravel 5.5

我的注册页面正确显示表格中的CsrfToken({{ csrf_field() }})。

表单HTML

<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
        {{ csrf_field() }}
        ....
</form>

我正在为用户使用内置身份验证。 除路线和重定向外没有改变任何东西。

当我提交表单时(仅在重新加载之后),它表示由于不活动而页面已过期。 请刷新并重试。 错误。

我很想念一个非常小的东西。 但不确定它是什么。 有帮助吗?

更新

发现了这个问题。 会话驱动程序设置为数组。 将其更改为文件,错误现在消失了。但是如果我使用数组有什么问题?

trans by 2019-06-09T16:47:35Z

安全性 - 如何在RESTful应用程序中阻止CSRF?

通常使用以下方法之一阻止跨站点请求伪造(CSRF):

  • 检查referer - RESTful但不可靠
  • 将令牌插入表单并将令牌存储在服务器会话中 - 而不是真正的RESTful
  • 含糊不清的一次性URI - 由于与令牌相同的原因而不是RESTful
  • 手动为此请求发送密码(不是HTTP身份验证使用的缓存密码) - RESTful但不方便

我的想法是使用用户秘密,一个神秘但静态的表单ID和JavaScript来生成令牌。

<form method="POST" action="/someresource" id="7099879082361234103">
    <input type="hidden" name="token" value="generateToken(...)">
    ...
</form>
  1. generateToken(7099879082361234103, 89070135420357234586534346)由来自经过身份验证的用户的JavaScript提取。
  2. 回复:generateToken(7099879082361234103, 89070135420357234586534346)这个秘密在概念上是静态的,但可以每天/每小时更改......以提高安全性。 这是唯一保密的事情。
  3. 使用JavaScript阅读神秘的(但对所有用户都是静态的!)表单ID,与用户秘密一起处理它:generateToken(7099879082361234103, 89070135420357234586534346)
  4. 将表单与生成的令牌一起发送到服务器。
  5. 由于服务器知道用户密钥和表单ID,因此可以在发送之前运行与客户端相同的generateToken函数并比较两个结果。 只有当两个值相等时,才会授权操作。

这种方法有问题,尽管事实上没有JavaScript它不起作用吗?

附录:

  • 无国籍CSRF保护
trans by 2019-05-28T04:15:45Z

Django Rest Framework删除cs

我知道有关于Django Rest Framework的答案,但我无法找到解决问题的方法。

我有一个具有身份验证和一些功能的应用程序。我添加了一个新的应用程序,它使用Django Rest Framework。 我想只在这个应用程序中使用该库。 我也想发出POST请求,我总是收到这个回复:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

我有以下代码:

# urls.py
from django.conf.urls import patterns, url


urlpatterns = patterns(
    'api.views',
    url(r'^object/$', views.Object.as_view()),
)

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt


class Object(APIView):

    @csrf_exempt
    def post(self, request, format=None):
        return Response({'received data': request.data})

我想添加API而不影响当前的应用程序。所以我的问题是如何才能为此应用禁用CSRF?

trans by 2019-05-11T09:43:27Z

1 2 下一页 共2页