小编sjm*_*ett的帖子

避免ASP.NET中的会话劫持

我最近阅读了一篇关于使ASP.NET会话在这里更安全的文章,起初它似乎非常有用.

以前我一直在会话中存储用户的IP地址,然后在每个后续请求中确保请求的IP等于存储的IP.

本文中的代码还通过检查IP地址来保护会话,除了它存储包含用户IP作为会话cookie一部分的散列消息验证代码.它会在每次请求时创建一个哈希MAC两次,我想这会让事情变慢一些.

我已经可以看到他们的代码中存在一个潜在的缺陷:如果你以某种方式获得了用于生成MAC的密钥,那么你可以使用自己的IP生成一个有效的MAC - 你甚至不必伪造IP会议开始了.

对于一个简单的问题来说,这似乎是一个过于复杂的解决方案,它不仅会产生更大的开销,而且比普通的方法更容易受到攻击 - 除非我完全忽略了这一点.

那么,为什么这种方法比我一直使用的更简单的方法更安全?

稍作一提,作者还指出,您不应该在比较中使用整个IP地址,因为如果某个用户的IP位于代理后面,则会更改每个请求.如果你检查X_FORWARDED_FOR,情况仍然如此吗?

谢谢!

asp.net security session-hijacking

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

在Scala中创建更多"功能"代码以使用不可变集合

我正在将一个算法从Java移植到Scala,它在VP树上进行范围搜索.简而言之,树中的节点具有空间坐标和半径:该半径内的节点可以在左子树上找到,而该半径外的节点可以在右子树上找到.范围搜索尝试在查询对象的指定距离内查找树中的所有对象.

在Java中,我向函数传递了一个arraylist,它在其中累积了结果,可能会递归其中一个或两个子树.这是Scala的直接端口:

def search(node: VPNode[TPoint, TObject], query: TPoint, radius: Double,
    results: collection.mutable.Set[TObject]) {

  var dist = distance(query, node.point)

  if (dist < radius)
    results += node.obj

  if (node.left != null && dist <= radius + node.radius)
    search(node.left, query, radius, results)

  if (node.right != null && dist >= radius + node.radius)
    search(node.right, query, radius, results)
}
Run Code Online (Sandbox Code Playgroud)

Scala的默认集合类型是不可变的,我认为不得不一直打字有点烦人collection.mutable.,所以我开始研究它.似乎建议使用不可变集合几乎总是正常的:我使用此代码进行数百万次查找,而且在我看来,复制和连接结果数组会降低它的速度.

例如,这样的答案表明问题需要更多地"功能性"接近.

那么,我应该怎么做才能以更加Scala风格的方式解决这个问题呢?理想情况下,我希望它与Java版本一样快,但我对解决方案感兴趣(并且可以随时对它们进行分析以查看它是否有很大不同).

请注意,我刚刚开始学习Scala(想想我可能会对有用的东西不屑一顾)但我不熟悉函数式编程,之前曾使用过Haskell(尽管我认为我不擅长它! ).

functional-programming scala data-structures

6
推荐指数
2
解决办法
406
查看次数

docker stop对节点进程不起作用

我希望能够在docker容器中运行node,然后才能运行docker stop <container>.这应该停止容器,SIGTERM而不是超时和做SIGKILL.不幸的是,我似乎错过了一些东西,我发现的信息似乎与其他部分相矛盾.

这是一个测试Dockerfile:

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y curl
RUN curl -sSL http://nodejs.org/dist/v0.11.14/node-v0.11.14-linux-x64.tar.gz | tar -xzf -
ADD test.js /
ENTRYPOINT ["/node-v0.11.14-linux-x64/bin/node", "/test.js"]
Run Code Online (Sandbox Code Playgroud)

这是test.jsDockerfile中引用的:

var http = require('http');

var server = http.createServer(function (req, res) {
  console.log('exiting');
  process.exit(0);
}).listen(3333, function (err) {
  console.log('pid is ' + process.pid)
});
Run Code Online (Sandbox Code Playgroud)

我这样构建它:

$ docker build -t test .
Run Code Online (Sandbox Code Playgroud)

我像这样运行它:

$ docker run --name test -p 3333:3333 -d test
Run Code Online (Sandbox Code Playgroud)

然后我跑:

$ docker …
Run Code Online (Sandbox Code Playgroud)

ubuntu node.js sigterm docker

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

在docker中管理数据库模式的"正确"方法

我正在开发一个包含Java Web应用程序和postgresql数据库的开源应用程序.理想情况下,它可以部署,类似于造船厂快速入门中详述的流程:

  1. 运行仅数据容器
  2. 运行数据库容器
  3. 运行应用程序容器

是否有建议的时间来设置数据库架构?我正在考虑使数据库映像的Dockerfile在构建时创建模式但是此时postgres显然没有运行.

docker dockerfile

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

每个请求缓存实体框架DbContexts

我有几个基于System.Entity.Data.DbContext的类.它们在Web应用程序的不同端部被多次使用请求 - 实例化它们是否昂贵?

我在HttpContext.Current.Items中缓存了它们的副本,因为每个请求都有几个副本它们感觉不对,但我现在发现它不会自动从HttpContext处理掉.请求.在我开始编写代码来处理它之前(在Application_EndRequest中),我认为我已经重新考虑了这种情况,因为如果我应该在需要它们的地方实例化它们并在那里处理它们,那么实际上没有必要缓存它们.

互联网上已经提出了与此类似的问题,但我似乎无法找到一个完全回答我的问题的问题.对不起,如果我正在重复某人.

更新

我发现在这篇博客文章中处理上下文可能并不重要,但我仍然有兴趣听到它们首先实例化是否昂贵.基本上,幕后有很多EF魔法,我想避免经常这么做吗?

c# asp.net entity-framework

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

如何区分可区分的联合类型

假设我有一个可区分的联合类型来表示 Redux 操作:

interface AddTodoAction { type: 'ADD_TODO'; description: string; }
interface RemoveTodoAction { type: 'REMOVE_TODO'; id: number; }
type Action = AddTodoAction | RemoveTodoAction;
Run Code Online (Sandbox Code Playgroud)

如果我想制作一个动作类型映射到处理它们的减速器,我可能会从:

type ActionReducers = {
  [P in Action['type']]: (state: State, action: Action) => State
};
Run Code Online (Sandbox Code Playgroud)

但是,第二个参数 ( action: Action) 过于笼统。我想说“Actiontype对应于P”,但我不知道它是否存在。我试过了,Action & {type: P}但这种做法适得其反。

有任何想法吗?

typescript

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

如何编写从另一种类型的键中去除前缀​​的 TypeScript 类型

我正在尝试编写一种类型,可以从另一种类型的键中删除给定的前缀。

我尝试过以下代码:

type StripPrefix<
  TPrefix extends string,
  T extends `${TPrefix}.${string}`,
> = T extends `${TPrefix}.${infer R}` ? R : never;

type MapKeysStripPrefix<T, TPrefix extends string> = {
  [K in StripPrefix<TPrefix, keyof T & `${TPrefix}.${string}`>]: Pick<
    T,
    keyof T & `${TPrefix}.${string}`
  >[`${TPrefix}.${K}`];
};

type test = {
  'test.blah': 1;
  'test.foo': 2;
  'bar.baz': 3;
};

type result = MapKeysStripPrefix<test, 'test'>;
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

Type '`${TPrefix}.${K}`' cannot be used to index type 'Pick<T, keyof T & `${TPrefix}.${string}`>'
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是不可能做到的。

typescript template-literals

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