我最近阅读了一篇关于使ASP.NET会话在这里更安全的文章,起初它似乎非常有用.
以前我一直在会话中存储用户的IP地址,然后在每个后续请求中确保请求的IP等于存储的IP.
本文中的代码还通过检查IP地址来保护会话,除了它存储包含用户IP作为会话cookie一部分的散列消息验证代码.它会在每次请求时创建一个哈希MAC两次,我想这会让事情变慢一些.
我已经可以看到他们的代码中存在一个潜在的缺陷:如果你以某种方式获得了用于生成MAC的密钥,那么你可以使用自己的IP生成一个有效的MAC - 你甚至不必伪造IP会议开始了.
对于一个简单的问题来说,这似乎是一个过于复杂的解决方案,它不仅会产生更大的开销,而且比普通的方法更容易受到攻击 - 除非我完全忽略了这一点.
那么,为什么这种方法比我一直使用的更简单的方法更安全?
稍作一提,作者还指出,您不应该在比较中使用整个IP地址,因为如果某个用户的IP位于代理后面,则会更改每个请求.如果你检查X_FORWARDED_FOR,情况仍然如此吗?
谢谢!
我正在将一个算法从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(尽管我认为我不擅长它! ).
我希望能够在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) 我正在开发一个包含Java Web应用程序和postgresql数据库的开源应用程序.理想情况下,它可以部署,类似于造船厂快速入门中详述的流程:
是否有建议的时间来设置数据库架构?我正在考虑使数据库映像的Dockerfile在构建时创建模式但是此时postgres显然没有运行.
我有几个基于System.Entity.Data.DbContext的类.它们在Web应用程序的不同端部被多次使用请求 - 实例化它们是否昂贵?
我在HttpContext.Current.Items中缓存了它们的副本,因为每个请求都有几个副本它们感觉不对,但我现在发现它不会自动从HttpContext处理掉.请求.在我开始编写代码来处理它之前(在Application_EndRequest中),我认为我已经重新考虑了这种情况,因为如果我应该在需要它们的地方实例化它们并在那里处理它们,那么实际上没有必要缓存它们.
互联网上已经提出了与此类似的问题,但我似乎无法找到一个完全回答我的问题的问题.对不起,如果我正在重复某人.
更新
我发现在这篇博客文章中处理上下文可能并不重要,但我仍然有兴趣听到它们首先实例化是否昂贵.基本上,幕后有很多EF魔法,我想避免经常这么做吗?
假设我有一个可区分的联合类型来表示 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) 过于笼统。我想说“Action与type对应于P”,但我不知道它是否存在。我试过了,Action & {type: P}但这种做法适得其反。
有任何想法吗?
我正在尝试编写一种类型,可以从另一种类型的键中删除给定的前缀。
我尝试过以下代码:
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)
我意识到这可能是不可能做到的。
asp.net ×2
docker ×2
typescript ×2
c# ×1
dockerfile ×1
node.js ×1
scala ×1
security ×1
sigterm ×1
ubuntu ×1