jjzjj

Php session 固定示例和修复

coder 2024-04-11 原文

我的问题是关于 session 固定的总结:

  • 爱丽丝在银行有一个账户 http://unsafe.com/ .不幸的是,爱丽丝 不是很懂安全。

  • 马洛里出去从银行取爱丽丝的钱。

  • Alice 对 Mallory 有一定程度的信任,并且会访问 Mallory 发给她的链接。

    1. Mallory 已确定 http://unsafe.com/接受任何 session 标识符,接受来自查询字符串的 session 标识符并具有 没有安全验证。 http://unsafe.com/因此不安全。
    2. 马洛里给爱丽丝发了一封电子邮件:“嘿,看看这个,有一个很酷的新 我们的帐户摘要功能 银行,http://unsafe.com/?SID=I_WILL_KNOW_THE_SID”。Mallory 正试图 将 SID 固定为 I_WILL_KNOW_THE_SID。
    3. Alice 很感兴趣并且 访问http://unsafe.com/?SID=I_WILL_KNOW_THE_SID .正常登录 屏幕弹出,爱丽丝登录。
    4. 马洛里来访 http://unsafe.com/?SID=I_WILL_KNOW_THE_SID现在可以无限制访问 到爱丽丝的帐户。 (来源:RichieHindle)

问题:

Q1 - 有没有办法明确阻止网站接受任何 session 标识符?

问题 2 - 我没有在我的网站上使用 $_GET 变量,所以有没有办法阻止从查询字符串中接受 session 标识符?

  • 注意:我正在使用带 SSL 的 php 5.4.3,还将使用 session_regenerate_id..

最佳答案

您可以设置 martinstoeckli 在他的回答中提到的选项,但这不会阻止 session 固定。它使 session 固定更难受到攻击,但并不能阻止它。

正如 ServerBloke 所提到的,您可以在验证用户的登录信息之后和显示需要身份验证的第一个页面之前立即使用 session_regenerate_id() 来防止 session 固定。

让攻击者更难利用 session 固定并不能阻止 session 固定。您必须生成一个新的 session ID。

人们越来越多地使用公共(public)的、不安全的、不受信任的 wi-fi 热点。可以从空中嗅探 session 。在物理网络上,它们可以从线路上嗅探出来。他们还可以通过使用中间人攻击来强制您访问任何 URL。因此, session 固定仍然是一个问题,即使攻击者无法向您发送 URL。

知道 session (和密码)可以被嗅探,还需要另一个步骤来防止 session 劫持。那就是 HTTPS(TLS/SSL)。

所有需要身份验证的 protected 页面只能通过 HTTPS 访问。因此,登录页面(用户发送用户名和密码的页面)应该通过 HTTPS 访问。在同一个脚本中,您必须重新生成一个新的 sessionID。然后必须通过 HTTP 访问 session 剩余部分的所有页面,以保护新 session ID。

这是一个示例伪代码 login.php 脚本:

// Force SSL
if($_SERVER["HTTPS"] != "on") {
  die('Must login via HTTPS');
}

// Load the current sessionID
session_start();

// Validate the login information, being sure to escape the input
...
if (! $valid) {
  die('Invalid login');
}

// Start the new session ID to prevent session fixation
session_regenerate_id();

// Clear the old session
$_SESSION=array();

// Log them in
$_SESSION['user_id'] = $userID;

关于Php session 固定示例和修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715002/

有关Php session 固定示例和修复的更多相关文章

  1. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  2. ruby - 在 Ruby 中将整数格式化为固定长度的字符串 - 2

    有没有一种简单的方法可以将给定的整数格式化为具有固定长度和前导零的字符串?#convertnumberstostringsoffixedlength3[1,12,123,1234].map{|e|???}=>["001","012","123","234"]我找到了解决方案,但也许还有更聪明的方法。format('%03d',e)[-3..-1] 最佳答案 如何使用%1000而不是进行字符串操作来获取最后三位数字?[1,12,123,1234].map{|e|format('%03d',e%1000)}更新:根据theTinMan的

  3. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

  4. arrays - 如何在下面的示例中将两个值数组分组为 n 个值数组? - 2

    我已经有很多两个值数组,例如下面的例子ary=[[1,2],[2,3],[1,3],[4,5],[5,6],[4,7],[7,8],[4,8]]我想把它们分组到[1,2,3],[4,5],[5,6],[4,7,8]因为意思是1和2有关系,2和3有关系,1和3有关系,所以1,2,3都有关系我如何通过ruby​​库或任何算法来做到这一点? 最佳答案 这是基本Bron–Kerboschalgorithm的Ruby实现:classGraphdefinitialize(edges)@edges=edgesenddeffind_maximum_

  5. ruby - Google-api-ruby-client 翻译 API 示例 - 2

    很高兴看到google代码:google-api-ruby-client项目,因为这对我来说意味着Ruby人员可以使用GoogleAPI-s来完善代码。虽然我现在很困惑,因为给出的唯一示例使用Buzz,并且根据我的实验,Google翻译(v2)api的行为必须与google-api-ruby-client中的Buzz完全不同。.我对“Explorer”演示示例很感兴趣——但据我所知,它并不是一个探索器。它所做的只是调用一个Buzz服务,然后浏览它已经知道的关于Buzz服务的事情。对我来说,Explorer应该让您“发现”所公开的服务和方法/功能,而不一定已经知道它们。我很想听听使用这个

  6. ruby - 如何修复 RVM gem "[ missing bin/ruby ]" - 2

    执行rvmlist后,我得到以下输出:rvmrubiesgems[missingbin/ruby]=*ruby-2.0.0-p645[x86_64]ruby-2.1.6[x86_64]ruby-2.2.1[x86_64]gems[missingbin/ruby]是什么意思?gems是某种系统gemset吗?它不是我创建的,我不知道我是否可以或应该删除它。 最佳答案 在我跑完之后:rvmfix-permissions然后我能够卸载具有[缺少bin/ruby]的版本。 关于ruby-如何修复

  7. ruby - 是否有 SproutCore 或 Cappuccino 的现场演示/示例应用程序 - 2

    在他们的网站上找不到任何内容。我主要只是想看看哪个值得一试(当然是RIA)。谢谢 最佳答案 SproutCoredemos 关于ruby-是否有SproutCore或Cappuccino的现场演示/示例应用程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1419788/

  8. ruby - 如何在 Ruby 中返回整数的固定长度二进制表示? - 2

    我知道我可以使用Fixnum#to_s将整数表示为二进制格式的字符串。但是1.to_s(2)生成1而我希望它生成00000001。我怎样才能使所有返回的字符串都以零作为填充到8个字符?我可以使用类似的东西:binary="#{'0'*(8-(1.to_s(2)).size)}#{1.to_s(2)}"if(1.to_s(2)).size但这看起来不是很优雅。 最佳答案 使用字符串格式。"%08b"%1#=>"00000001" 关于ruby-如何在Ruby中返回整数的固定长度二进制表示?

  9. ruby - 如何设置自动测试以仅重新运行失败的 rspec 示例 - 2

    我对自动测试的工作方式的印象(基于cucumbergithubwiki和其他在线内容)是它应该重新运行红色示例,直到它们通过。我的问题是它会重新运行规范文件中找到失败示例的所有示例,包括通过的示例。我不想浪费时间在修复失败示例的同时重新运行通过的示例。是否可以配置自动测试以便仅运行失败的示例? 最佳答案 您需要rspec-retrygem。以下是文档中有关如何实现它的一些示例:将它应用到覆盖整个测试套件的configureblock中...RSpec.configuredo|config|config.verbose_retry=t

  10. ruby - 是否有 Rack::Session::Cookie 用法的基本示例? - 2

    我找不到任何使用Rack::Session::Cookie的简单示例,并且希望能够将信息存储在cookie中,并在以后的请求中访问它并让它过期.这些是我能找到的唯一示例:HowdoIset/getsessionvarsinaRackapp?http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html这是我得到的:useRack::Session::Cookie,:key=>'rack.session',:domain=>'foo.com',:path=>'/',:expire_after=>2592000,:secret=

随机推荐