相关疑难解决方法(0)

在JavaScript中访问网页的HTTP标头

如何通过JavaScript访问页面的HTTP响应头?

此问题相关,该问题已修改为询问有关访问两个特定HTTP标头的问题.

相关:
如何通过JavaScript访问HTTP请求标头字段?

javascript http http-headers

396
推荐指数
11
解决办法
56万
查看次数

X-Requested-With标头有什么意义?

JQuery和其他框架添加以下标头:

X-Requested-With:XMLHttpRequest

为什么需要这个?为什么服务器要以不同于正常请求的方式处理AJAX请求?

更新:我刚刚使用这个标题找到了一个真实的例子:https://core.spreedly.com/manual/payment-methods/adding-with-js.如果在没有AJAX的情况下请求支付处理器,它会在完成后重定向回原始网站.当使用AJAX请求时,不会进行重定向.

ajax jquery http-headers cors

197
推荐指数
3
解决办法
16万
查看次数

HttpOnly cookie如何处理AJAX请求?

如果在具有基于cookie的访问限制的站点上使用AJAX,则JavaScript需要访问cookie.HttpOnly cookies是否可以在AJAX网站上运行?

编辑:如果指定了HttpOnly,Microsoft通过禁止JavaScript访问cookie创建了一种防止XSS攻击的方法.FireFox后来采用了这个.所以我的问题是:如果你在一个网站上使用AJAX,比如StackOverflow,那么Http-Only cookies是一个选择吗?

编辑2:问题2.如果HttpOnly的目的是阻止JavaScript访问cookie,你仍然可以通过XmlHttpRequest对象通过JavaScript检索cookie,那么HttpOnly有什么意义呢?

编辑3:以下是维基百科的引用:

当浏览器收到这样的cookie时,它应该像往常一样在以下的HTTP交换中使用它,但不能让它对客户端脚本可见.[32] 该HttpOnly标志不是任何标准的一部分,并未在所有浏览器中实现.请注意,目前没有阻止通过XMLHTTPRequest读取或写入会话cookie.[33].

我知道document.cookie当你使用HttpOnly时会被阻止.但似乎您仍然可以在XMLHttpRequest对象中读取cookie值,从而允许使用XSS.HttpOnly如何让你更安全?通过使cookie基本上只读?

在您的示例中,我无法写入您的内容document.cookie,但我仍然可以使用XMLHttpRequest对象窃取您的cookie并将其发布到我的域中.

<script type="text/javascript">
    var req = null;
    try { req = new XMLHttpRequest(); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
    req.open('GET', 'http://stackoverflow.com/', false);
    req.send(null);
    alert(req.getAllResponseHeaders());
</script>
Run Code Online (Sandbox Code Playgroud)

编辑4:对不起,我的意思是你可以将XMLHttpRequest发送到StackOverflow域,然后将getAllResponseHeaders()的结果保存到字符串中,正则输出cookie,然后将其发布到外部域.似乎维基百科和哈克斯在这一方面同意我,但我希望能够重新接受教育......

最终编辑:啊,显然这两个网站都是错误的,这实际上是FireFox中的一个错误.IE6和7实际上是目前唯一完全支持HttpOnly的浏览器.

重申我所学到的一切:

  • HttpOnly限制对IE7和FireFox中的document.cookie的所有访问(不确定其他浏览器)
  • HttpOnly从IE7中的XMLHttpObject.getAllResponseHeaders()中的响应头中删除cookie信息.
  • XMLHttpObjects只能提交给它们来自的域,因此没有cookie的跨域发布.

编辑:此信息可能不再是最新的.

cookies ajax httponly

191
推荐指数
3
解决办法
7万
查看次数

在ASP.NET Core中使用防伪cookie但使用非默认CookieName

我正在考虑在ASP.NET Core中更改默认防伪cookie的名称.

我想更改cookie名称的原因是为了匿名化cookie,在我看来,没有理由为什么最终用户应该能够确定这个cookie的责任.

Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName

  1. 如何更改防伪cookie的名称?我想它应该以某种方式在Startup.cs文件中完成?
  2. 通过更改名称默认的防伪cookie可能会产生什么影响?
  3. 如何在ASP.NET Core中使用防伪cookie?
  4. 不同的Web应用程序(使用相同的域)是否应该共享单个防伪cookie,还是应该为每个Web应用程序创建单独的防伪cookie?

asp.net cookies asp.net-mvc asp.net-core-mvc asp.net-core

6
推荐指数
1
解决办法
5612
查看次数

CSRF和CORS与Django(REST框架)

我们正在将我们的前端转移到一个单独的项目(Django之外).这是一个Javascript单页面应用程序.

其中一个原因是让我们的前端开发人员更容易完成他们的工作,而不必在本地运行整个项目 - 包括API.相反,我们希望他们能够与我们设置的测试API进行通信.

我们已经设法解决了大部分CORS/CSRF问题.但是现在我们遇到了一些我无法在任何地方找到解决方案的东西,尽管阅读了大量文档和SO答案.

前台和API是从不同的域(在开发过程中提供服务localhosttest-api.example.com).到目前为止,虽然从同一个域提供服务,但前端已经能够从csrftokenAPI(Django)设置的cookie中获取CSRF令牌.但是,当从不同的域提供服务时,frontend(localhost)无法访问API(api-test.example.com)的cookie .

我正在试图找到解决这个问题的方法,以某种方式将CSRF令牌传递给前端.Django文档建议X-CSRFToken为AJAX请求设置自定义标头.如果我们在每个响应中同样为CSRF令牌提供标头并且(通过Access-Control-Expose-Headers)允许前端读取此标头,我们是否会破坏CSRF保护?

鉴于我们已经为API正确设置了CORS(即只允许某些域对API进行跨域请求),第三方站点上的JS应该无法读取此响应头,因此无法做出妥协AJAX请求我们的用户背后,对吧?还是我错过了一些重要的事情?

还是有另一种更好的方法来实现我们想要的东西吗?

javascript django csrf cors django-rest-framework

6
推荐指数
1
解决办法
895
查看次数

我必须在React SPA中使用CSRF保护吗?

我使用React Single Page Application作为客户端或Create React App(CRA)。

在后端,我使用Node.js&Express。

要获取数据或存储,我需要从客户端到后端调用API。

实际上,我已经看过几种中间件,例如:-Express CSURF

但老实说,我不明白如何在每次请求时都向客户端发送CSRF令牌。我尝试了几次,方法是将CSRF插入cookie中,然后将其放在客户端。但是当存储第一个请求或新的cookie时,出现error Invalid CSRF Token

即使我这样做:

app.use(session({
    genid: function (req) {
        return uuidv4() // use UUIDs for session IDs
    },
    name:keys.session.name,
    secret: keys.session.secret,
    resave: false,
    saveUninitialized: true,
    rolling:true,
    cookie: { 
        secure: false,
        httpOnly: true,
        maxAge:keys.session.maxAge, // satu hari,
        sameSite:true,
     }

}));
app.use(passport.session());
app.use(cookieParser());
app.use(csrf({ cookie: false }));


app.use((req,res,next)=>{
     res.cookie('CSRF_token', req.csrfToken(), { sameSite: true });
})
Run Code Online (Sandbox Code Playgroud)

这意味着CSRF_token cookie将更改每个请求。但我只这样设置一次:axios.defaults.headers.common['csrf-token'] = csrf;结果仍然有效,但不起作用。

那我需要CSRF吗?或如何在React SPA上配置正确的SPA。

csrf node.js express reactjs

6
推荐指数
1
解决办法
2557
查看次数

多个 csrftoken cookie,RFC 要求只有 1 个 csrftoken 吗?

我试图找到以下问题的答案。

  • 浏览器在什么情况下会存储多个csrftokencookies?
  • 它是正确的还是技术上有效的功能?
  • 以及在 RFC/security 文档中传递数组或尝试数组csrftoken存在的位置,还是技术上有效?

我附上了一个示例屏幕截图,显示了我在csrftoken各种 cookie 路径和到期时间(多租户和各种表单路径)中看到的多个内容。

在此处输入图片说明

有关的:

python django cookies http session-cookies

6
推荐指数
1
解决办法
358
查看次数

注销后的 CSRF 令牌生命周期

在玩 时Spring security,我想知道CSRF应用程序注销时(跨站点请求伪造)令牌生命周期的方法。

假设用户登录并浏览我的网站。然后他退出。我是否应该使 CSRF 令牌失效(在我的情况下作为 cookie 实现,如果重要的话)?

如果不是,在安全方面有什么我应该注意的警告吗?

如果是,我该如何管理用户在应用程序上的任何进一步操作?如果没有任何CSRFToken,服务器端会禁止某些操作。那我应该生成一个新的令牌吗?

我用于Spring boot服务器端,默认情况下它似乎会使令牌无效(或者我犯了一些错误导致了这个结果......)

谢谢你的帮助。

csrf token spring-security spring-boot

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

如何防止我的网络应用程序在java中遭受CSRF(跨站请求伪造)

我试图阻止我的 Web 应用程序遭受 CSRF(跨站点请求伪造)我点击了此链接Link for CSRF

这是我尝试过的。为了在 Java 中实现这一机制,我选择使用两个过滤器,一个为每个请求创建盐,另一个用于验证它。由于用户请求和后续应验证的 POST 或 GET 不一定按顺序执行,因此我决定使用基于时间的缓存来存储有效盐字符串的列表。

第一个过滤器用于为请求生成新的盐并将其存储在缓存中,代码如下:

public class LoadSalt implements Filter{


    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        // Assume its HTTP  
        HttpServletRequest httpReq = (HttpServletRequest)request;
        // Check the user session for the salt cache, if none is present we create one
        @SuppressWarnings("unchecked")
        Cache<String, Boolean> csrfPreventionSaltCache = (Cache<String, Boolean>)
                httpReq.getSession().getAttribute("csrfPreventionSaltCache");

        System.out.println("Checking cahce befor creating it from Request :csrfPreventionSaltCache: "+csrfPreventionSaltCache);

        if(csrfPreventionSaltCache == null)
        {
            System.out.println("csrfPreventionSaltCache is null …
Run Code Online (Sandbox Code Playgroud)

java csrf-protection

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

Spring Security 6 POST请求未经permitAll()授权

我正在使用 Spring Boot 3、Spring Security 6。我的安全配置无法正常工作。我有两条路径,任何请求都应该被允许,而对于其他所有请求,都需要进行身份验证。

GET和方法都POST适用于那些需要身份验证的人。

对于那些带有 的permitAll(),只有GET请求有效。对于POST,我收到 401 Unauthorized。

我负责 CSRF,无论如何我希望所有POST请求都能工作,而不仅仅是那些带有身份验证的请求。

在 Postman 上,我选择POST“无身份验证”,放置 RAW 正文并选择 JSON。我真的不知道为什么它不起作用。

这是我的代码:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

 
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http, KeycloakLogoutHandler keycloakLogoutHandler) throws Exception {

        CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
        XorCsrfTokenRequestAttributeHandler delegate = new XorCsrfTokenRequestAttributeHandler();
        // set the name of the attribute the CsrfToken will be populated …
Run Code Online (Sandbox Code Playgroud)

spring spring-security spring-boot

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