小编hes*_*son的帖子

防止会话劫持

如何防止多个客户端使用相同的会话ID?我问这个是因为我想添加额外的安全层来防止我网站上的会话劫持.如果黑客以某种方式计算出另一个用户的会话ID并使用该SID发出请求,我如何检测到服务器上有不同的客户端共享一个SID然后拒绝劫持尝试?

编辑

我仔细考虑后接受了Gumbo的回答,因为我已经意识到由于无状态HTTP协议的限制,我所要求的是不可能的.我忘记了什么可能是HTTP的最基本原则,现在我认为这个问题似乎有点微不足道.

让我详细说明我的意思:

在用户A登录example.com后,他会获得一些随机会话ID,为简单起见,让它为'abc123'.此会话ID在客户端存储为cookie,并通过服务器端会话进行验证,以确保登录的用户在从一个网页移动到另一个网页时仍然登录.如果HTTP不是无状态的,那么当然不需要存在这个cookie.因此,如果用户B窃取用户A的SID,并在其计算机上创建一个值为'abc123'的cookie,他就会成功劫持用户A的会话,但服务器根本无法合法地识别用户B的请求与用户A的请求有任何不同,因此服务器没有理由拒绝任何请求.即使我们要列出已经在服务器上处于活动状态的会话并尝试查看是否有人正在访问已经处于活动状态的会话,我们如何确定它是另一个非法访问会话的用户而不是同一个用户谁已经使用会话ID登录,但只是尝试用它发出另一个请求(即导航到不同的网页).我们做不到.检查用户代理?可以欺骗 - 尽管如此,作为深度防御措施还是很好的.IP地址?可以出于正当理由进行更改 - 但是我没有根本不检查IP地址,我建议检查IP的前两个八位字节,甚至是数据计划网络上的用户,因为完全合法的原因,他们经常拥有不断变化的IP通常只有IP更改的最后两个八位字节.

总而言之,正是无状态HTTP谴责我们永远无法完全保护我们的网站免受会话劫持,但良好的做法(如Gumbo提供的那些)将足以防止大多数会话攻击.因此,试图通过拒绝同一SID的多个请求来保护会话免受劫持是荒谬的,并且会破坏会话的整个目的.

php security session

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

会话劫持究竟是如何在PHP中运行的?

我已经建立了一个注册/登录的网站.我可以在Chrome的开发者工具中看到PHPSESSID cookie,所以我想知道如何使用这个会话ID值劫持我记录的帐户,为了简单起见,让我们说一个不同的浏览器?

一个安全的网站是否应该能够确定此会话被劫持并阻止它?

另外,使用PHP的其他大型网站(例如Facebook)怎么没有PHPSESSID cookie呢?他们是否给它一个不同的名称,或者他们只是完全使用不同的机制?

php security cookies session

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

强制嵌套div的最小高度为100%?

我知道min-height: 100%如果父元素有一些高度的数值,那么只能占用其父元素高度的至少100%,但是如果我有一些嵌套的div并且我希望它们都具有最小高度100%?我试过min-height:inherit但是那也没用?我知道我可以用JavaScript解决这个问题,只需检查文档加载时的浏览器高度值,然后将其分配给我的嵌套div的min-height属性,但我想知道是否可以解决这个问题.只是css?

编辑:我还应该提到我需要我最外层的div和我的嵌套div都有一个100%的最小高度,这样它们至少占据浏览器的高度,但如果需要则扩展.

css height layout position

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

如何在PHP中安全地存储包含敏感数据的cookie?

我希望我的用户在登录我的网站时能够"保持登录状态".根据这篇文章的最佳答案建议,"Keep Me Logged In" - 最好的方法,我决定在一个cookie中散列用户的salt和密码的组合,并将用户的id(一个数字)存储在另一个cookie中.当然,哈希值也将存储在数据库服务器端,以便在用户再次返回时进行验证.我使用的salt值与我用来首次注册时用户密码的哈希值相同,因此它是静态的 - 它在会话之间不会改变.我用这种方法看到了一些问题.

1)使用注册盐是一个好主意,如果它是静态的,或者我应该每次为cookie生成不同的盐?

2)如果有人要访问cookie并将它们复制到另一台计算机,然后尝试从该计算机访问该网站,理论上,它会自动将它们登录到该用户的帐户,这不是安全问题吗?

3)在某些具有恶意意图的用户要访问数据库的情况下,安全的网站会使用密码和哈希密码,这使得黑客很难获得对多个帐户的访问权限(如果有的话).但是,通过简单地使用hash和salt值并创建一个与数据库中已更改的值相匹配的cookie,他们可以有效地访问他们想要的任何帐户,从而使整个密码散列过程变得毫无用处.因此,我现在使用的这种cookie方法会影响我的整个数据库和我所有用户的帐户.

所以我的问题是,如何在PHP中存储一个带有敏感信息的cookie,例如用户密码的哈希,而不必担心上述问题?当然,像Gmail和Hotmail这样提供"让我登录"功能的网站遵循比我现在所做的更安全的方法,那么他们将如何做呢?

php security cookies hash login

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

在bash中的特定子字符串之后提取令牌

假设我在包含几行的 bash 脚本中有一个字符串变量:

blah blah blah
...
...
an interesting parameter: 12345 some other useless stuff...
...
...
Run Code Online (Sandbox Code Playgroud)

我想从这个字符串中提取 12345。我试图寻找使用“一个有趣的参数:”作为“分隔符”的方法,但我无法让它工作。有没有干净的方法来做到这一点?

bash

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

从strchr获取int而不是指针

如何将字符串中第一次出现的字符索引作为int而不是指向其位置的指针?

c string

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

如何回显shell中的运行进程?

如果我有一个C++程序期望在运行时期间从控制台输入cin,我该如何从shell脚本自动化这个输入?我还需要将其输出存储在一个文件中,但这部分很容易.我已经研究了不同的方法,包括将它回显到/ proc中pid的文件描述符,但似乎没有任何效果.

这是我到目前为止:

#!/bin/sh
g++ -o runme source.cpp
echo <<EOT | ./runme > output
expected program input
more expected program input
even more
EOT
Run Code Online (Sandbox Code Playgroud)

请注意,每行输入都需要在程序中通过cin读取"输入按键",我假设应该发生这种情况,因为脚本中的程序输入由新行分隔.在这里,程序被执行但是在文件中产生相同的输出,无论我在EOT之前放置什么,所以它没有像预期的那样被输入到程序的cin中.

bash shell process

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

C程序中的字符串文字,可以在二进制中找到吗?

例如:

int main(int argc, char *argv[]) {   
  if (strncmp(argv[1], "password")) {
    printf("Incorrect password\n");   
  }
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

我可以反汇编这个编译程序的二进制文件并在二进制文件的某处看到字符串“密码”,还是只在运行时可见?

c

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

标签 统计

php ×3

security ×3

bash ×2

c ×2

cookies ×2

session ×2

css ×1

hash ×1

height ×1

layout ×1

login ×1

position ×1

process ×1

shell ×1

string ×1