使用 apache2 作为 proxypass 时的 Apache OpenMeetings 4.0.4 CSRF 攻击

2024-03-20

我有 Apache OpenMeetings 4.0.4 女巫 Apache/2.2.22 作为代理。

在 OM 的 conf/red5.properties 中我有

http.port=8080

我想做两件事:

  1. 重定向 HTTP (80) -> HTTPS (443)

  2. 将 HTTP (8080) 重定向到 HTTPS (443)

我的 /etc/apache2/sites-available/defaultconf 是:

<VirtualHost *:80>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:8080>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

我的 /etc/apache2/sites-available/default-sslconf 是:

<VirtualHost *:443>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    ProxyRequests Off
    ProxyPreserveHost On

    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    SSLEngine On
    SSLCerificateFile /etc/apache2/certs/collaboration.crt
    SSLCerificateKeyFile /etc/apache2/certs/collaboration.key
    SSLCerificateChainFile /etc/apache2/certs/chain.pem
</VirtualHost>

当我打字时http://domain.test-test.eu/ http://domain.test-test.eu/它把我重定向到https://domain.test-test.eu https://domain.test-test.eu.

当我打字时http://192.168.XXX.YYY http://192.168.XXX.YYY它把我重定向到https://192.168.XXX.YYY https://192.168.XXX.YYY

但是当我打字时http://192.168.XXX.YYY:8080 http://192.168.XXX.YYY:8080 or http://domain.test-test.eu:8080 http://domain.test-test.eu:8080它不会将我重定向到https://192.168.XXX.YYY https://192.168.XXX.YYY or https://domain.test-test.eu/ https://domain.test-test.eu/。页面打开(无 HTTPS)。

第二个问题是,在OM的日志中我可以看到CSRF信息,但无法通过HTTPS登录。

OM 日志中的信息:

[http-nio-0.0.0.0-8080-exec-10] INFO o.a.w.p.h.CsrfPreventionRequestCycleListener - Possible CSRF attack, request URL: http://192.168.XXX.YYY/openmeetings/wicket/bookmarkable/org.apache.openmeetings.web.pages.auth.SignInPage, Origin: https://192.168.XXX.YYY, action: aborted with error 400 Origin does not correspond to request

我应该如何更改 Apache 设置才能使其正常工作?


恐怕无法设置“将 HTTP (8080) 重定向到 HTTPS (443)”

如果您在端口 8080 上运行 OpenMeetings,则不能将其用于 Apache,反之亦然。 Internet 端口应由 OM 或 Apache 独占使用,而不是两者都使用。

我会在固件级别关闭端口 8080,以拒绝对 OM 的直接访问。 (并请删除规则<VirtualHost *:8080>否则 OM 将无法启动Port already in use信息)

现在根据 CSRF:

你需要修改conf/jee-container.xml并添加以下属性

<property name="secure" value="true" />

To <!-- Tomcat without SSL enabled -->之前阻塞<property name="connectionProperties">

这应该可以解决你的问题

但 OpenMeetings 无法使用此配置......

因为你还需要代理 WebSockets ....

所以你还需要 mod_rewrite 和 mod_proxy_wstunnel

那么你需要添加以下部分:

RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
RedirectMatch ^/$ https://domain.test-test.eu/openmeetings

此外,您可能希望对 RTMP 流量执行隧道传输,这将需要特殊的规则open, send, idle and close

以下是 Apache 2.4 的最终配置:

<VirtualHost *:443>
  ServerName domain.test-test.eu

  ## Vhost docroot
  DocumentRoot "/var/www/"

  ## Directories, there should at least be a declaration for /var/www/

  <Directory "/var/www/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>

  ## Logging
  ErrorLog "/var/log/apache2/domain.test-test.eu-ssl-error.log"
  ServerSignature Off
  CustomLog "/var/log/apache2/domain.test-test.eu.http_access.log" combined

  ## SSL directives
  SSLEngine on
  SSLCertificateFile      "/_certs_path_/domain.test-test.eu/fullchain.pem"
  SSLCertificateKeyFile   "/_certs_path_/domain.test-test.eu/privkey.pem"
  SSLCACertificatePath    "/_CA_certs_path_"

###      OpenMeetings    ###
## Custom fragment
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:5080/$1 [P,L]
RedirectMatch ^/$ https://domain.test-test.eu/openmeetings
ProxyPreserveHost On

<Location /openmeetings>
  Require all granted      
  ProxyPass http://localhost:5080/openmeetings
  ProxyPassReverse http://localhost:5080/openmeetings
  RewriteEngine On
  RewriteRule ^/(.*) http://localhost:5080/$1 [P]
</Location>
<Location /open>
  Require all granted
  ProxyPass http://localhost:5080/open
  ProxyPassReverse http://localhost:5080/open
</Location>
<Location /send>
  Require all granted
  ProxyPass http://localhost:5080/send
  ProxyPassReverse http://localhost:5080/send
</Location>
<Location /idle>
  Require all granted
  ProxyPass http://localhost:5080/idle
  ProxyPassReverse http://localhost:5080/idle
</Location>
<Location /close>
  Require all granted
  ProxyPass http://localhost:5080/close
  ProxyPassReverse http://localhost:5080/close
</Location>

</VirtualHost>

按预期为我工作:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 apache2 作为 proxypass 时的 Apache OpenMeetings 4.0.4 CSRF 攻击 的相关文章

随机推荐

  • 更精确的Thread.Sleep

    我该如何做 Thread Sleep 10 4166667 好吧 我现在明白了 睡眠不是一条出路 所以我使用计时器 但计时器也是以毫秒为单位 我需要更精确 有纳秒精度的计时器吗 那么您希望您的线程恰好在该时间休眠然后恢复 忘掉它 该参数告诉
  • Android自定义权限-Marshmallow

    背景 从历史上看 Android 自定义权限已经一团糟 https code google com p android issues detail id 65864 and 取决于安装顺序 https code google com p a
  • Hibernate 的二级缓存是否/可以用于 COUNT() 操作?

    当使用 Hibernate 和 Ehcache 作为二级缓存 2LC 实现时 在使用 WHERE 子句执行 COUNT 操作时是否 或可以 使用此缓存 用 SQL 术语来说 我正在执行的查询是SELECT COUNT id FROM tab
  • 以编程方式选择 DataGridView 的一行

    在我的表单应用程序中 有一个 buttonNEW 选择NewIndexRow of DataGridView我想用这个按钮更改 datagridview 的索引 private void buttonNew Click object sen
  • 将变量向上舍入到下一个最接近的 X 倍数

    我正在寻找一种方法将数字四舍五入到下一个最接近的 250 倍数 例如 如果我有以下 JS var containerHeight container height 我们假设 containerHeight 的值是 680px 我想要一种向上
  • 如何设置 AG-GRID 列垂直边框的样式

    我希望我的 AG Grid 列具有垂直边框 默认情况下 网格行具有水平边框 我希望它模仿常规 Excel 电子表格的外观和感觉 我尝试在列定义中使用单元格样式 如下所示 this columnDefs headerName Test cel
  • 我可以通过编程方式向 WPF 数据网格添加一行吗?

    我只想添加一个新行 我的数据源位于需要进行一些处理的对象中 我需要像下面这样的 wpf 数据网格 DataRow row dataTable NewRow foreach NavItem item in record Items row i
  • 如何将数据绑定到非静态类上的静态属性?

    In my ViewModel类我有一个静态属性AllSupport但我不知道如何正确绑定它 ListView 已绑定到 ObservableCollectionAllEffects具有AllSupport静态属性 我用过这个
  • 在 PHP 邮件函数中设置 $headers 数组时遇到问题

    当我将 headers 数组指定为时 我无法通过 PHP 邮件函数发送电子邮件 headers array From gt email protected cdn cgi l email protection Content type gt
  • 悬停时模糊整个背景

    所以我的首页上有一些项目 其中显示了一些动漫 我想做的是 当你将鼠标悬停在第一个节目 Hunter X Hunter 上时 我希望页面上的所有其他内容 不包括悬停的内容 都变得模糊 我环顾四周 看到了一些例子 但我觉得我的情况有点不同 首页
  • PHP REST API 中的选项

    我正在用 PHP 编写 REST API 但找不到任何解释如何使用 OPTIONS 的资源 它似乎是 REST API 的重要组成部分 这就是我发现的内容 谁能解释 OPTIONS 应该包含什么以及它应该如何格式化 提前致谢 HTTP OP
  • 您在哪里进行验证?

    希望您会看到我在下面的场景中描述的问题 如果不清楚 请告诉我 您的应用程序分为三层 前端UI层 可以是asp net webform 或者window 用于编辑Person数据 中间层业务服务层 编译成dll PersonServices
  • 如何在 jenkins 2 管道中使用 FileParameterValue

    如何将当前项目工作区中的文件作为参数传递给另一个项目 例如就像是 build job otherproject parameters class FileParameterValue name output tar gz value wai
  • IntelliJ 中的“重新部署”和“重新启动服务器”有什么区别?

    我使用 IntelliJ 和 Tomcat 6 来运行 Spring Java EE 应用程序 我没有部署已编译的 war 而是选择使用分解的 war 部署 从而使我可以选择热交换一些类和 JSP 然而 除了 更新类 和 更新类和资源 之外
  • 不支持扫描,将 driver.Value 类型 []uint8 存储为类型 *time.Time

    我很难查询用户 其定义为 type User struct ID int db id json id UserName string db username json username Email string db email json
  • 正则表达式匹配字符串,不包含重复字符

    我正在寻找一个简单的正则表达式来匹配没有重复字符的字符串 例子 JHMCU26809C211501 good JHMGD18508S219366 good JHMCU268091111111 坏 12345678901234567 good
  • NULL 与 NOT NULL [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 检测到设备正在关闭?

    在我的 Android 应用程序中 如果设备突然关闭 我需要执行一些操作 有什么方法可以检测设备是否已关闭 广播操作 设备正在关闭 这是广播时 设备正在关闭 完全关闭 而不是睡眠 一次 广播完毕 将进行最后的关闭 所有 未保存的数据丢失 应
  • RecyclerView 的 GridLayoutManager 上的方形布局

    我尝试用方形图像制作网格布局 我认为一定可以操纵GridLayoutManager通过操纵onMeasure做一个 super onMeasure recycler state widthSpec widthSpec 代替 super on
  • 使用 apache2 作为 proxypass 时的 Apache OpenMeetings 4.0.4 CSRF 攻击

    我有 Apache OpenMeetings 4 0 4 女巫 Apache 2 2 22 作为代理 在 OM 的 conf red5 properties 中我有 http port 8080 我想做两件事 重定向 HTTP 80 gt