- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想更多地了解 PHP Session Fixation和劫持以及如何防止这些问题。我一直在 Chris Shiflett 的网站上阅读以下两篇文章:
session_regenerate_id(true);
是否足够?成功登录后?我想我理解正确。
$_GET
在 URL 中传递的 token 。以防止 session 劫持。这将如何完成?我猜当有人登录时,您会生成他们的 token 并将其存储在 session 变量中,然后在每个页面上将该 session 变量与
$_GET
的值进行比较。变量?
最佳答案
好的,有两个独立但相关的问题,每个问题的处理方式都不同。
session 固定
这是攻击者为用户显式设置 session 的 session 标识符的地方。通常在 PHP 中,它是通过给它们一个像 http://www.example.com/index...?session_name=sessionid
这样的 url 来完成的。 .一旦攻击者将 url 提供给客户端,则该攻击与 session 劫持攻击相同。
有几种方法可以防止 session 固定(全部执行):
session.use_trans_sid = 0
在您的 php.ini
文件。这将告诉 PHP 不要在 URL 中包含标识符,并且不要读取标识符的 URL。 session.use_only_cookies = 1
在您的 php.ini
文件。这将告诉 PHP 永远不要使用带有 session 标识符的 URL。 session.hash_function
在 php.ini
.如果 PHP < 5.3,设置为 session.hash_function = 1
对于 SHA1。如果 PHP >= 5.3,设置为 session.hash_function = sha256
或 session.hash_function = sha512
. session.hash_bits_per_character
在 php.ini
.将此设置为 session.hash_bits_per_character = 5
.虽然这不会使破解变得更加困难,但当攻击者试图猜测 session 标识符时,它确实会有所作为。 ID 会更短,但会使用更多字符。 session.entropy_file
设置额外的熵和 session.entropy_length
在您的 php.ini
文件。将前者设置为 session.entropy_file = /dev/urandom
后者是将从熵文件中读取的字节数,例如 session.entropy_length = 256
. session_name()
来完成的。在调用 session_start
之前使用您自己的标识符名称作为第一个参数. $_SERVER['HTTP_USER_AGENT']
在 session 中。基本上,当 session 开始时,将它存储在类似 $_SESSION['user_agent']
的地方。 .然后,在每个后续请求中检查它是否匹配。请注意,这可以伪造,因此它不是 100% 可靠,但总比没有好。 $_SERVER['REMOTE_ADDR']
在 session 中。基本上,当 session 开始时,将它存储在类似 $_SESSION['remote_ip']
的地方。 .某些为其用户使用多个 IP 地址的 ISP(例如 AOL 曾经这样做)可能会导致此问题。但是如果你使用它,它会更安全。攻击者伪造 IP 地址的唯一方法是在真实用户和您之间的某个时间点破坏网络。如果他们破坏了网络,他们的行为可能比劫持(例如 MITM 攻击等)更糟糕。 $_SESSION['counter']++
在服务器端。也在浏览器端的 JS 中做一些事情来做同样的事情(使用本地存储)。然后,当您发送请求时,只需获取 token 的随机数,并验证该随机数在服务器上是否相同。通过这样做,您应该能够检测到被劫持的 session ,因为攻击者不会有确切的计数器,或者如果他们有,您将有 2 个系统传输相同的计数并可以判断一个是伪造的。这不适用于所有应用程序,但它是解决问题的一种方法。 session_regenerate_id
重新生成 session 标识符时应该删除旧 session 。这与核心 session 处理程序透明地发生。然而有些
custom session handlers using session_set_save_handler()
不要这样做,并且很容易攻击旧的 session 标识符。确保如果您使用自定义 session 处理程序,请跟踪您打开的标识符,如果它与您保存的标识符不同,则明确删除(或更改)旧标识符上的标识符。
session_regenerate_id(true)
就可以了。 .这将为您删除旧的 session 信息。旧 ID 不再有效,如果攻击者(或其他任何人)尝试使用它,则会导致创建新 session 。但是要小心自定义 session 处理程序......
session_destroy
:
function destroySession() {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
session_destroy();
}
关于PHP session 固定/劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081025/
当一个对象被实例化时,无论是字符串/函数/等等,__proto__属性(property)包括在内。该属性似乎是由 __proto__ 生成的Object.prototype 中的访问器... Obj
我一直在寻找防止 session 劫持的方法,在这种情况下,有人会窃取 session cookie 并使用它来获得对系统的访问权限。 程序如 http://codebutler.com/firesh
某些 malware such as AVG劫持 404 页面,以便在浏览器中显示一个布满自己广告的页面。 我发现的唯一解决方法是在我的 web 应用程序中放弃自定义错误页面的 404 http 状态
大多数Web应用程序使用cookie来管理用户的 session ,即使关闭了浏览器,也允许您保持登录状态。 让我们假装我们做了书中的所有事情,以确保保存cookie本身。 加密内容 仅设置http
WinError.h中定义的错误代码是否可以被劫持并通过我自己的代码返回? 定义了一些通用 Win32 错误代码: ERROR_FILE_NOT_FOUND:“系统找不到指定的文件。” 当找不到文件时
修改文本然后单击按钮只会触发 onchange 代码 但我需要知道按钮是否被点击: 我需要更改什么才能获取点击处理程序? 最佳答案 效果很好,但 alert() 很糟糕。 我不知道它的确切细节,但
如何保护我的用户免受 session 劫持? 最佳答案 Owasp Top 10 for 2010 中包含三个部分你应该阅读。 1: (!!) A3:“损坏的身份验证和 session 管理。” (!
我有一个问题。我试图在音频元素发生变化时立即获取它的来源,而不是让它连接到服务器。让我详细说明一下:服务器只允许一个请求(随机生成的内容 url),我正在尝试获取该请求,显然我不希望使用新源重新加载音
我需要一种 JavaScript/jQuery 方法来“劫持”不基于类或 ID 的 CSS 定义。 CSS 示例: input { border: 1px solid red; } 如果我有一
一位黑客联系我说他们会使用 session 劫持来关闭我的网站,他说我的文本框存在 session 劫持漏洞。 有没有办法保护文本框免受 session 劫持我用它来逃避和防止 sql 注入(inje
我一直在研究一套安全的登录/门户类型的工具,通用代码没有 SQL 注入(inject)、XSS 等,我有很多东西可以阻止 session 劫持。 为每个页面重新生成 session ID 将用户的IP
在我的 web.xml 中,我为一些资源定义了一个用户数据约束: Personal Area /personal/* U
情况 好吧,正如您在下面看到的,我有一个主应用程序,它创建了一个线程,它创建了一堆后台 worker 。当 RunWorkerCompleted 在某些 BG worker 上被触发时,我有时最终会丢
当我的 golang 应用程序崩溃时,它正在打印 go routines 堆栈跟踪并退出。我想知道是否有很好的方法来获取 panic 输出以进行进一步处理。重定向 stderr 是不够的,因为人们想在
我有一个关于PHP中 session 劫持的问题。我今天早上一直在阅读有关它的信息,我有一些问题在我阅读的文档中并未得到明确回答。 用户可以更改他们在我的网站上的 session 吗?也就是说,如果他
如何防止多个客户端使用相同的 session ID?我问这个是因为我想添加一个额外的安全层来防止我的网站上的 session 劫持。如果黑客以某种方式找出另一个用户的 session ID 并使用该
我想更多地了解 PHP Session Fixation和劫持以及如何防止这些问题。我一直在 Chris Shiflett 的网站上阅读以下两篇文章: Session Fixation Session
DNS 劫持作为最常见的网络攻击方式,是每个站长或者运维团队最为头疼的事情。苦心经营的网站受到 DNS 劫持后,不仅会影响网站流量、权重,还会让用户置身于危险之中,泄露隐私造成财产损失。 就是这样
编辑:对于那些想知道该 SDK 是什么的人来说,它是 Flurry 的中文克隆版,==>> Umeng。 编辑2:在那个奇怪的SDK中实际上有一个禁用崩溃日志处理选项,这将使我的uncaughtExc
我阅读了 Nancy Forms Authentication 的文档.据我所知,那里推荐的方法会导致终身 session ID: "The identifier is the token that
我是一名优秀的程序员,十分优秀!