小编han*_*aad的帖子

SPA中的刷新令牌Cookie的CSRF保护

我在AngularJS SPA中使用资源所有者密码凭据OAuth 2.0流程.有几篇文章(这里,这里 ......)和这个问题的答案解释了我们不应该在(web)客户端(LocalStorage)上存储刷新令牌,而是将它们加密存储在HttpOnly Cookie中并使用代理API我们实现refreh令牌的解密,将其转发给安全令牌服务.

大多数文章都暗示我们应该通过使用一种常见的保护机制来关注CSRF.我想知道单页应用程序中最好的解决方案是什么.

Angular $ http参考解释了我们应该如何对抗CSRF的默认机制:服务器必须设置一个名为的cookie XSRF-TOKEN.此cookie必须是Javascript可读的,以便我们可以X-XSRF-TOKEN在请求中设置HTTP标头.这种机制是否足以保护refreh令牌场景?

  1. 第一次启动应用程序.没有访问令牌或cookie可用,我们必须使用用户名和密码登录.api/login给我们一个访问令牌,我们保留在内存中并设置两个cookie.HttpOnly refreh令牌cookie和JS可读XSRF-TOKENcookie.

  2. 访问令牌到期.调用api/token验证XSRF-TOKEN并使用令牌cookie返回新的访问令牌; 设置新的刷新cookie

  3. 从中重启应用程序AppCache.内存中没有访问令牌,但可用cookie.用api/token...

  4. 坏人想偷我们的refreh cookie.准备好的页面api/token使用我们的cookie 发出请求,但没有X-XSRF-TOKENHTTP标头.

任何严重的安全问题?

javascript security csrf oauth-2.0 angularjs

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

如何调整数组大小

是否有一个可以替换以下函数的Array方法(类似的东西a.splice(some, tricky, arguments))?

function resize(arr, newSize, defaultValue) {
  if (newSize > arr.length)
    while(newSize > arr.length)
      arr.push(defaultValue);
  else
    arr.length = newSize;
}
Run Code Online (Sandbox Code Playgroud)

如果没有,是否有更好/更好/更短/实施?如果数组应该增长并且在shrink上删除值,则该函数应附加默认值.

javascript arrays

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

dudit测试结果消息在哈德森

我正在使用Hudson作为Delphi 2010项目的CI服务器.XMLTestRunner.pas单元将DUnit测试结果写入xml文件,该文件由hudson xUnit插件用于报告测试结果.xUnit插件显示失败但没有消息:

Stacktrace

MESSAGE:

+++++++++++++++++++
STACK TRACE:
Run Code Online (Sandbox Code Playgroud)

在"发布测试工具结果报告"的hudson项目配置中,我选择"NUnit-Version N/A(默认)"作为测试工具,因为列表中没有dunit选项,并且xml文件看起来类似于nunit格式:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<test-results total="123" notrun="0" date="20.12.2010" time="09:19:24">
<test-suite name="HelloWorldTestSuite" total="46" notrun="0">
<results>
<test-case name="TestCase.HelloWorldTest" execute="True" success="False" time="0,003" result="Failure">
<failure name="ETestFailure" location=""/>
<message>expected: &lt; hello world! &gt; but was: &lt; hallo welt &gt;</message>
</test-case>
...
Run Code Online (Sandbox Code Playgroud)

在哈德森配置中还有一个"自定义工具"选项,我必须指定"自定义样式表",但我不知道如何编写这样的样式表(是否有任何文档?).

在我的C++项目中,使用boost测试,可以很好地报告所有消息的失败情况.

delphi hudson dunit hudson-plugins jenkins

7
推荐指数
1
解决办法
2483
查看次数

未破坏未使用的接口引用

由于不小心使用Delphi接口,我的应用程序中有另一个错误.当我将接口传递给忽略该参数的过程时,实例永远不会被释放.请参阅以下简单示例:

ITest = interface
    procedure Test;
end;

Tester = class(TInterfacedObject, ITest)
public
    procedure Test;
end;

Base = class
public
    procedure UseTestOrNot(test : ITest); virtual; abstract;
end;

A = class(Base)
public
    procedure UseTestOrNot(test : ITest); override;
end;

B = class(Base)
public
    procedure UseTestOrNot(test : ITest); override;
end;

{ A }

procedure A.UseTestOrNot(test: ITest);
begin
    test.Test();
end;

{ B }

procedure B.UseTestOrNot(test: ITest);
begin
    WriteLn('No test here');
end;

// -------- Test ---------------------------------------
var
    list : TObjectList<Base>;
    x : Base;
    t : ITest; …
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-2010

7
推荐指数
2
解决办法
459
查看次数

隐藏无参数创建与重新引入?

当我开始使用Delphi时,我读到了避免无参数Create构造函数无用调用的唯一方法是在其中抛​​出异常或断言.当我本周第一次使用reintroduce关键字时,我发现它似乎也解决了这个问题.

Test = class
private
    n_ : Integer;
public
    constructor Create(n : Integer); reintroduce;
end;
Run Code Online (Sandbox Code Playgroud)

调用Test.Create给出了所需的编译器错误.这种方法有什么问题吗?

delphi oop

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

为什么set :: find不是模板?

使用模板函数,<algorithm>您可以执行此类操作

struct foo
{
    int bar, baz;
};

struct bar_less
{
    // compare foo with foo
    bool operator()(const foo& lh, const foo& rh) const
    {
        return lh.bar < rh.bar;
    }
    template<typename T>  // compare some T with foo
    bool operator()(T lh, const foo& rh) const
    {
        return lh < rh.bar;
    }
    template<typename T>  // compare foo with some T
    bool operator()(const foo& lh, T rh) const
    {
        return lh.bar < rh;
    }
};

int main()
{
    foo foos[] …
Run Code Online (Sandbox Code Playgroud)

c++ stl std c++11

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

为指向集合的指针重载开始/结束是一个好主意

我真的很喜欢自由begin end编写更通用算法和数据结构的新概念.目前,我有时会想到我必须区分调用begin(range)begin(*range)类型持有对集合的引用作为指针.我想是否总是为我自己的集合类型提供指针的开始/结束重载是一个好主意.

struct Container {
    int values[3];
};

const int* begin(const Container& c);
const int* end(const Container& c);
const int* begin(const Container* c);
const int* end(const Container* c);

template<typename Range>
int Sum(const Range& range)
{
    return std::accumulate(begin(range), end(range), 0);
}

int main(void)
{
    Container c = {1, 2, 3};
    std::cout << Sum(c);
    std::cout << Sum(&c);
}
Run Code Online (Sandbox Code Playgroud)

如果这是一个好主意,为什么不为此提供一个模板:

template<typename Range>
auto begin(const Range* r) -> decltype(begin(*r)){
    using std::begin;
    return begin(*r);
}

template<typename Range>
auto end(const …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

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

默认情况下通过引用传递不可变值类型

通常我在struct和class之间选择不是因为内存问题而是因为类型的语义.我的一些值类型具有相当大的内存占用,有时太大而无法一直复制此数据.所以我想知道总是通过引用传递不可变值对象是不是一个好主意?由于对象是不可变的,因此不能通过引用接受它们的方法进行修改.通过参考传递时是否还有其他问题?

c# value-type

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

这是哪种设计模式:工厂方法还是抽象工厂

我正在阅读有关创建性设计模式的文章,并设法在 Factory 、 Abstract Factory 和 Factory 方法之间完全混淆了自己。

我在下面发布了一个代码片段。有人愿意让我知道这是哪一个以及(如果可能)可以对代码进行哪些更改以使其属于其他类别?

#include "iostream.h"

#define QUIT 2

class Shape {
public:
    virtual void draw() = 0;
};

class Circle : public Shape {
public:
    void draw() {
        cout << "circle : draw" << endl;
    }
};
class Square : public Shape {
public:
    void draw() {
        cout << "square : draw" << endl;
    }
};

class Factory {
public:
    virtual Shape* createInstance(int id) = 0;
};

class SimpleShapeFactory : public Factory {
public: …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns factory-pattern

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

使用表达式为数组中的字段创建文本索引

我想为数组中的多个字段和元素字段创建文本索引.目前我将数组元素的路径定义为字符串,这是有效的.有没有办法像我可以对这样的简单字段一样使用表达式:

var textIndex = Builders<Project>.IndexKeys
    .Text(p => p.Name)
    .Text(p => p.Description)
    // This and any other expression I tried does not work
    //.Text(p => p.System.Elements.SelectMany(e => e.Name))
    // But this works fine:
    .Text("system.elements.name");

await collection.Indexes.CreateOneAsync(textIndex);
Run Code Online (Sandbox Code Playgroud)

我正在使用mongodb 3.2和MongoDB.Driver 2.2.2

c# mongodb mongodb-csharp-2.0 mongodb-.net-driver

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