- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过如何在 php 中保护 session ,有一些,但它们不像向 session 添加用户代理、ip 和端口并加密它们那样有效。什么是防止 session 劫持的好方法?我想采取以下步骤:
我听到的困难是:当您使用每页 token 时,您需要禁用后退按钮?这是为什么?
还有几件事还不清楚?在数据库中保存 session 更安全吗?为什么?使用 SSL 有多安全?快速重新生成 session ID 怎么样,会有帮助吗?
什么系统可以防止暴力破解加密 key (通过大量尝试猜测 session ID 来识别试图淹没服务器的用户的 ip 会有帮助吗?)
session 重新生成是如何工作的,旧的 session key 是否会自动销毁,如果黑客获得了旧的 session key ,它是否仍然有效?请理解 session 安全对我来说很重要,因为我正在学习如何成为一名渗透测试员?
更新我想这样做:使用 key A 对 session ID 进行对称加密对随机生成的 token 进行对称加密,该 token 将在带有 key 的帖子字段中
随机生成的 token 也将附加到 session ID,然后加密。
应要求,我应该获取这些变量:$_SESSION['PHPSESSID'](其中加密了随机生成的 token )$_POST['RandomlyGeneratedToken']
用 key A解密session id,用 key B解密随机token。做 2 项检查:-检查 token 是否与发送的第一个请求上的 token 相同。-检查sessionid中是否存在token。
黑客的可能性:-暴力破解 session ID。我的 session ID 足够长,他会花时间。我可以使用一个系统来检测来自具有不同 session ID 的同一 ip 的大量请求流,并使用 sleep 功能减慢他的速度。
-窃听流量并从用户那里获取 session ID 以及 token 并尝试提交它们。嗯...我将不得不为每个请求重新生成 session ID 并在某些页面上快速使 session 过期..可能是 1 分钟..但他能偷听多快?
最佳答案
“将 PHPSESSID 键完全更改为类似 id 的通用值”
这是通过混淆和薄弱环节实现的安全。用户只需要查看他们的 cookie 并将其放在一起用于 session ID 即可绕过此
“为每个页面生成 token 并将其放在页面上,然后验证它以及 session 。”
这是一个有趣的想法。但是如果用户打开了多个页面怎么办?你能支持多个 token 吗? token 什么时候过期?
“我会添加一个较短的 session 到期时间。”
好主意,但这可能会影响那些在页面上停留很长时间然后点击刷新却发现他们过早退出的用户
“在 session ID 中添加更多变量并对其进行加密,这样它会更长更难破解。也许我会使用 RSA 加密。”
为什么要用RSA加密?为什么不用像 SHA 这样的单向哈希算法呢?不要忘记添加盐或初始化向量
“放置一个注销按钮,以便用户能够终止他的 session 。”
谁曾经点击过退出按钮? ;-)
“使用 javascript 来计算时间,超过 5 分钟将提醒用户继续他的 session 。”
是
“仅在 cookie 中保存 session 。”
不要这样做,始终保存数据服务器端。 cookie 在客户端存储时可以被操纵
至于您的其他评论:您可以将 session 变量存储在数据库中,这允许您检查其他内容,例如 ip 地址等(尽管您可以使用自定义 session 处理函数检查 ip 等:http://php.net/manual/en/session.customhandler.php) .但是,如果您使用数据库并且过于频繁地重新生成您的 session ID(例如,每次加载页面),您会发现如果您的用户快速点击刷新按钮,则该 ID 的重新生成速度将快于您的服务器在数据库中更新它的速度 session 将丢失。
“ session 重新生成是如何工作的,旧 session key 是否自动销毁”
是的,除非您编写自定义代码,否则这取决于您的自定义代码
我希望我的回答有点用,但我建议遵循 OWASP 的 session 管理指南,以便您遵循最佳实践: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet
编辑
我不确定 token 是什么意思?您是说 session ID 中的 token 吗?这会提供什么值(value)?您的 token 是 session 变量吗?这没有意义,因为它的值存储在服务器端,关键是您要防止其滥用的 phpsessid。
此外,永远不要指望黑客有能力不理解您的逻辑。如果他们想理解,他们会的。
最后,你为什么需要这么多安全措施?有足够好的安全性(如果您遵循某些标准)。您可能不需要防范外国政府黑客,否则您可能会将此项目外包。遵循易于搜索的教程或指南中概述的最佳实践,例如我上面提供的 OWASP 指南。就足够了:-)
编辑“另外,你说最佳存储是数据库?我描述的最后一种对抗暴力破解的方法呢?”
数据库 session 存储不一定是最佳的。您可以在需要时使用它,例如当您对需要共享 session 数据的多个 Web 服务器进行负载平衡时。
两种阻止暴力攻击的方法是 1) 有一个非常长的 session ID,以及 2) 频繁地重新生成它
关于php - 保护php session 劫持的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15446557/
我遇到了一个奇怪的问题。我有这个: $(document).ready(function () {
我正在编写一个程序,它从列表中读取一些 ID,从中找出不同的 URL,然后将图像保存到我的 C: 驱动器中。 如果我在浏览器中导航到图像 URL,它们就会起作用。此外,如果我尝试从不同的服务器获取图像
我编写了一个 REST WCF RIA Silverlight 4.0 兼容服务,我可以从 javascript + jQuery.1.4.2.js + JSON2.js(当然,还可以从 .NET 4
我很确定这个网站实际上还没有得到回答。一劳永逸地,与 32 位有符号整数范围内的数字字符串匹配的最小正则表达式是什么,范围是 -2147483648至 2147483647 . 我必须使用正则表达式进
我有两个data.table;我想从那些与键匹配的元素中随机分配一个元素。我现在这样做的方式相当慢。 让我们具体点;这是一些示例数据: dt1<-data.table(id=sample(letter
我已经安装了 celery 、RabitMQ 和花。我可以浏览到花港。我有以下简单的工作人员,我可以将其附加到 celery 并从 python 程序调用: # -*- coding: utf-8 -
我正在使用 ScalaCheck 在 ScalaTest 中进行一些基于属性的测试。假设我想测试一个函数,f(x: Double): Double仅针对 x >= 0.0 定义的, 并返回 NaN对于
我想检查文件是否具有有效的 IMAGE_DOS_SIGNATURE (MZ) function isMZ(FileName : String) : boolean; var Signature: W
在 Herbert Schildt 的“Java:完整引用,第 9 版”中,有一个让我有点困惑的例子。它的关键点我无法理解可以概括为以下代码: class Test { public stat
我在工作中查看了一些代码,发现了一些我以前没有遇到过的东西: for (; ;) { // Some code here break; } 我们一直调用包含这个的函数,我最近才进去看看它是
在 Herbert Schildt 的“Java:完整引用,第 9 版”中,有一个让我有点困惑的例子。它的关键点我无法理解可以概括为以下代码: class Test { public stat
我试图编写一个函数,获取 2D 点矩阵和概率 p 并以概率 p 更改或交换每个点坐标 所以我问了一个question我试图使用二进制序列作为特定矩阵 swap_matrix=[[0,1],[1,0]]
这个问题在这里已经有了答案: Using / or \\ for folder paths in C# (5 个答案) 关闭 7 年前。 我在某个Class1中有这个功能: public v
PostgreSQL 10.4 我有一张 table : Column | Type ------------------------- id | integer| title
我正在 Postgresql 中编写一个函数,它将返回一些针对特定时区(输入)计算的指标。 示例结果: 主要问题是这只是一个指标。我需要从其他表中获取其他 9 个指标。 对于实现此目标的更简洁的方法有
我需要在 python 中模拟超几何分布(用于不替换采样元素的花哨词)。 设置:有一个装满人口许多弹珠的袋子。弹珠有两种类型,红色和绿色(在以下实现中,弹珠表示为 True 和 False)。从袋子中
我正在使用 MaterializeCSS 框架并动态填充文本输入。我遇到的一个问题是,在我关注该字段之前,valid 和 invalid css 类不会添加到我的字段中。 即使我调用 M.update
是否有重叠 2 个 div 的有效方法。 我有以下内容,但无法让它们重叠。 #top-border{width:100%; height:60px; background:url(image.jpg)
我希望你们中的一位能向我解释为什么编译器要求我在编译单元中重新定义一个静态固定长度数组,尽管我已经在头文件中这样做了。这是一个例子: 我的类.h: #ifndef MYCLASS_H #define
我正在使用旧线程发布试图解决相同问题的新代码。什么是安全 pickle ? this? socks .py from socket import socket from socket import A
我是一名优秀的程序员,十分优秀!