2024-09-06 16:21:13
可以源码安装(python环境)
service rabbitmq-server start
也可以docker安装,依赖docker环境
运行成功后有两个端口:
支持配置文件,参考docker内配置文件路径: /etc/rabbitmq/conf.d/10-defaults.conf
virtual host
类似mysql支持多个用户访问同一个实例(IP+PORT)的不同数据库
exchange交换机
类似一种邮箱或存储队列,支持加入或转发推送能力
正常邮箱类型, 生产者往RabbitMQ队列增加消息,但是消费者不一定要及时看
对比 邮箱模型, 只要生产消息 就会马上竞争消费掉,可以有效的避免消息堆积
Fanout(广播模型): 将消息发送给绑定给交换机的所有队列(因为他们使用的是同一个RoutingKey)。
Direct(定向): 把消息发送给拥有指定Routing Key (路由键)的队列。
Topic(通配符): 把消息传递给拥有 符合Routing Patten(路由模式)的队列。
2024-09-06 16:20:08
做一个有温度和有干货的技术分享作者 —— Qborfy
最近在研究SSR,发现很多服务都会用到SSRF,所以就顺便研究了一下SSRF。
下面是一篇从网络上翻译过来的文章, 大家简单参考了解。
服务器端请求伪造是一种 Web 安全漏洞,允许攻击者导致服务器端,从而发出非法请求。
在典型的 SSRF 攻击中,攻击者可能会导致服务器连接到仅供内部使用的服务。在其他情况下,他们可能能够强制服务器连接到任意外部系统。这可能会泄露敏感数据,例如授权凭据。
SSRF 攻击通常会导致未经授权的操作或组织内的数据访问。这可能位于易受攻击的网站中,也可能位于该网站可以与之通信的其他后端系统上。在某些情况下,SSRF 漏洞可能允许攻击者执行任意命令。
与外部第三方系统连接,如:接入第三方的登录等, 更容易受到SSRF漏洞攻击。
SSRF 攻击通常利用信任关系, 去攻击的网站, 并执行未经授权的操作。这些信任关系可能与服务器相关,或者与同一组织内的其他后端系统相关。
在针对服务器的 SSRF 攻击中,攻击者会通过内部络接口向网站的服务器发出 HTTP 请求。这通常涉及提供带有主机名的 URL,例如127.0.0.1 或localhost。
例如,想象一个购物网站,它允许用户查看特定商店中是否有商品的库存。为了提供信息,网站必须查询各种后端 REST API。它通过前端 HTTP 请求将 URL 当成参数传递到后端,然后执行 API 端点来实现此目的。当用户查看商品的库存状态时,他们的浏览器会发出以下请求:
1 |
POST /product/stock HTTP/1.0 |
这会导致服务器向指定的 URL 发出请求,检索库存状态,并将其返回给用户。
在此示例中,攻击者可以修改请求以指定服务器本地的 URL:
1 |
POST /product/stock HTTP/1.0 |
服务器获取/admin
URL 的内容并将其返回给用户。
攻击者可以访问/admin
URL,但管理功能通常只有经过身份验证的用户才能访问。这意味着攻击者不会看到任何感兴趣的内容。但是,如果对/admin URL 的请求来自本地计算机,则会绕过正常的访问控制。应用程序授予对管理功能的完全访问权限,因为请求似乎源自受信任的位置。
为什么应用程序会以这种方式运行,并隐式信任来自本地计算机的请求?出现这种情况的原因有多种:
这种信任关系(其中源自本地计算机的请求的处理方式与普通请求不同)通常使 SSRF 成为严重漏洞。
在某些情况下,应用程序服务器能够与用户无法直接访问的后端系统进行交互。这些系统通常具有不可访问的专用 IP 地址。后端系统通常受到网络拓扑的保护,因此它们的安全状况通常较弱。在许多情况下,内部后端系统包含敏感功能,任何能够与系统交互的人都可以在无需身份验证的情况下访问这些功能。
在前面的示例中,假设后端 URL https://192.168.0.68/admin 有一个管理界面。攻击者可以提交以下请求来利用SSRF漏洞,并访问管理界面:
1 |
POST /product/stock HTTP/1.0 |
包含 SSRF 行为以及旨在防止恶意利用的防御措施的应用程序很常见。通常,这些防御措施是可以被规避的。
某些应用程序会阻止包含主机名(如127.0.0.1和localhost或敏感 URL(如/admin
的输入,可如下设计:
某些应用程序仅允许匹配允许值白名单的输入。过滤器可能会在输入的开头或包含在输入中查找匹配项。您可以通过利用 URL 解析中的不一致来绕过此过滤器。
URL 规范包含许多在 URL 使用此方法实现即席解析和验证时可能会被忽略的功能:
https://expected-host:fakepassword@evil-host
https://evil-host#expected-host
https://expected-host.evil-host
有时可以通过利用开放重定向漏洞来绕过基于过滤器的防御。
在前面的示例中,假设用户提交的 URL 经过严格验证,以防止恶意利用 SSRF 行为。但是,允许 URL 的应用程序包含开放重定向漏洞。如果用于发出后端 HTTP 请求的 API 支持重定向,您可以构造一个满足过滤器的 URL,并将请求重定向到所需的后端目标。
例如,该应用程序包含一个开放重定向漏洞,其中以下 URL:/product/nextProduct?currentProductId=6&path=http://evil-user.net
返回重定向到:http://evil-user.net
您可以利用开放重定向漏洞绕过URL过滤,利用SSRF漏洞,如下:
1 |
POST /product/stock HTTP/1.0 |
此 SSRF 漏洞之所以有效,是因为应用程序首先验证提供的stockAPI URL 是否位于允许的域上(事实确实如此)。然后,应用程序请求提供的 URL,这会触发开放重定向。它遵循重定向,并向攻击者选择的内部 URL 发出请求。
如果您可以导致应用程序向提供的 URL 发出后端 HTTP 请求,但后端请求的响应未在应用程序的前端响应中返回,则会出现 隐藏的SSRF漏洞。
隐藏的SSRF更难利用,但有时会导致在服务器或其他后端组件上完全远程执行代码。
许多服务器端请求伪造漏洞很容易被发现,因为应用程序的正常流量涉及包含完整URL的请求参数。 SSRF 的其他示例更难找到。
有时,应用程序仅将主机名或 URL 路径的一部分放入请求参数中。然后,提交的值会在服务器端合并到所请求的完整 URL 中。如果该值很容易被识别为主机名或 URL 路径,则潜在的攻击面可能是显而易见的。但是,作为完整 SSRF 的可利用性可能会受到限制,因为您无法控制所请求的整个 URL。
某些应用程序以某种规范传输数据,该规范允许包含数据解析器可能请求该格式的 URL。一个明显的例子是 XML 数据格式,它已广泛用于 Web 应用程序中,用于将结构化数据从客户端传输到服务器。当应用程序接受 XML 格式的数据并解析它时,它可能容易受到XXE 注入的攻击。它还可能容易通过 XXE 受到 SSRF 的攻击。当我们研究 XXE 注入漏洞时,我们将更详细地介绍这一点。
一些应用程序使用服务器端分析软件来跟踪访问者。该软件通常会在请求中记录 Referer 标头,因此它可以跟踪传入链接。通常,分析软件会访问 Referer 标头中出现的任何第三方 URL。这样做通常是为了分析引用站点的内容,包括传入链接中使用的锚文本。因此,Referer 标头通常是 SSRF 漏洞的有用攻击面。
2024-08-13 18:00:01
做一个有温度和有干货的技术分享作者 —— Qborfy
最近在开发微软的Teams应用,在开发过程中遇到了一个跨域请求cookie的问题,具体表现是,当我在Teams应用中登录后,然后通过iframe的方式打开一个第三方网站,第三方网站无法获取到cookie,导致无法登录。这个问题困扰了我很久,最后通过Google找到了解决方案,特此记录一下。
Teams应用是在Teams的iframe中打开的,第三方网站是独立于Teams的,所以是跨域的,当我在Teams中登录后,第三方网站无法获取到cookie,导致无法登录。
SameSite
属性为None
,Secure
属性为true
,具体代码如下:1 |
// 以下配置为express-session |
解决途中遇到的问题:
SameSite
属性为None
,Secure
属性为false
,则无法在Chrome浏览器中正常工作,具体表现是 Set-Cookie 请求被浏览器拒绝,具体原因可以参考这里。Secure
属性设置为true
,express-session中没有设置proxy
属性,那么express不会返回set-cookies
header信息,因为express-session默认是关闭的proxy(反向代理),打开后才支持x-forwarded-for
,具体原因 可以参考这里。app.set('trust proxy', 1)
,否则无法获取到x-forwarded-for
信息,具体原因可以参考这里。Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。Cookie 主要用于以下三个方面:
Cookie 通常设置在 HTTP 头中,格式为:Set-Cookie: <cookie名>=<cookie值>
,例如:Set-Cookie: name=value
。
Cookie 一般是在后端设置,但也可以在前端设置,例如:document.cookie = 'name=value'
。
表格如下:
属性 | 作用 | 默认值 | 示例 |
---|---|---|---|
Name | Cookie 的名称 | 无 | name |
Value | Cookie 的值 | 无 | value |
Domain | Cookie 所属域名 | 当前文档所在域名 | example.com |
Path | Cookie 所在路径 | 当前文档所在路径 | / |
Expires | Cookie 过期时间 | 当前会话 | Thu, 01 Jan 1970 00:00:00 GMT |
Max-Age | Cookie 过期时间(秒) | 当前会话 | 86400 |
Secure | Cookie 是否仅通过 HTTPS 发送 | false | true |
HttpOnly | Cookie 是否仅允许 HTTP 进行操作,就是说不允许在前端JS中操作 | false | true |
SameSite | Cookie 是否仅通过同一站点发送 | None | Strict、Lax、None |
当浏览器同时设置多个同名 Cookie 时,它们的优先级如下:
SameSite=None
优先级高于 SameSite=Strict
。Secure
优先级高于 SameSite
。Domain
优先级高于 Path
。如果以上几个
2024-06-10 13:49:34
做一个有温度和有干货的技术分享作者 —— Qborfy
在书中,卡尼曼会带领我们体验一次思维的终极之旅。他认为,我们的大脑有快与慢两种作决定的方式。常用的无意识的“系统1”依赖情感、记忆和经验迅速作出判断,它见闻广博,使我们能够迅速对眼前的情况作出反应。
举个例子: 肚子饿了去点菜,我们点很多余点菜,然后吃了一阵子就后悔了,如果我们慢慢规划去点,发现别人都已经吃完走了。
温馨提醒:本书涉及N多经济学和心理学的专业术语,需要不断查资料去理解其术语的意思,这对经济学、心理学入门有极大的作用。
缪勒莱耶错觉是指前提为两条长度相等的线段,假如一条线段两端加上向外的两条斜线,另一条线段两端加上向内的两条斜线,则前者要显得比后者长得多。如下图所示:
联想的机制,是人类大脑思维活跃最常见的一种
启动效应
涟漪效应
佛罗里达效应
贝叶斯定理(英语:Bayes’ theorem)是概率论中的一个定理,描述在已知一些条件下,某事件的发生概率。比如,如果已知某种健康问题与寿命有关,使用贝叶斯定理则可以通过得知某人年龄,来更加准确地计算出某人有某种健康问题的概率。 —— 贝叶斯定理 维基百科
1970年代,卡内曼和特沃斯基系统地研究这一领域。长久以来,主流经济学都假设每个人作决定时都是“理性”的,然而现实情况并不如此;展望理论加入了人们对得失、发生概率高低等条件的不对称心理效用,成功解释了许多看来不理性的现象。展望理论对分析在不确定情况下的人为判断和决策方面作出了突出贡献,康纳曼更因此获得2002年的诺贝尔经济学奖。
展望理论是描述性而非指示性的理论——它旨在解释现象,而非分析怎样作决策才是最好的。利用展望理论可以对风险与报酬的关系进行实证研究。
前景理论(展望理论):人在不确定条件下的决策选择,取决于结果与展望(预期、设想)的差距而非单单结果本身。
解释描述人们为何在当下做出选择的理论依据,而不是作为决策依据。不过可以利用理论去分析当前面临选择的可能性。
禀赋效应 [1]或厌恶剥夺(英语:Endowment effect),形容当一个人拥有某项物品或资产的时候,他对该物品或资产的价值评估要大于没有拥有这项物品或资产的时候。
这一现象常常用于行为经济学的分析中,并与损失厌恶的理论相联系。由于禀赋效应,人们在决策过程中,往往会产生偏见,导致对于规避风险的考虑远远大于对于追逐利益的考虑,因此人们在出卖物品或资产时,往往索价要比其本身更高的价值。
这在炒股中往往很常见,当你拥有一只股票的时候,你往往会收集无数利好的消息去以为它会持续上涨。而不是因为你看到利好的消息而去拥有一只股票。