我有一个 RESTful Web 服务,它接受对没有实体主体的资源的 POST 请求,例如空的 POST 请求。默认的 modsecurity 配置要求所有 POST 请求都具有 Content-Length:
# Require Content-Length to be provided with every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
Run Code Online (Sandbox Code Playgroud)
modsecurity 控制台将此报告为 PROTOCOL_VIOLATION/EVASION。但是,在阅读HTTP/1.1 RFC 时,我不认为这是真的。允许服务器要求 Content-Length(返回 400 或 411),但我看不到任何内容表明服务器必须(或建议它应该)以这种方式运行。
这可能因浏览器而异,但在没有实体主体的情况下发出 POST 请求的 Flash 客户端不会发送请求标头。当你做'curl -XPOST ...'时也不会卷曲。由于这些原因,并且因为我认为 modsecurity 规则是对 HTTP 规范的误解,我正在考虑在我们的配置中取消对 POST 请求的 Content-Length 标头的要求。
有谁知道是否有特定的漏洞利用此规则来解决?大量的谷歌搜索,我只发现这是库存 modsecurity 配置的一部分。
我一直在寻找一段时间,似乎无法找到如何在 IIS7 中启用 PUT 和 DELETE。当我使用这些动词时,我不断收到 404。我玩过请求过滤,这没有影响。我查看了 IIS 日志,我只看到了 404.0.0。有任何想法吗?
更多信息:我正在使用 HttpModule 进行 REST URL 重写。所以处理程序动词不会削减它。
更新:好的 - 所以我想通了。我正在使用一个模块来重写 URL,然后使用一个处理程序来处理。为了让 PUT 和 DELETE 工作,我像往常一样注册了模块,然后显式地注册了 PUT 和 DELETE 动词的处理程序。
有一些类似的问题,我试图从中找出答案,但到目前为止我一直没有成功。请告知我如何始终将 http 重定向到 https(并在此过程中从主机名中删除www.)。还有一个附带说明,最好在主 Apache conf 中执行此操作而不是.htaccess- 但我想这不适用于大多数人。
我已将此代码段添加到一个VirtualHost部分:
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
...但它在我访问时没有效果http://www.domain(它应该重定向到https://domain)
它没有效果,因为我没有使用RewriteEngine on- 所以它现在可以工作:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud) 如何在 Wireshark 中过滤 HTTP 500 响应及其请求?
我可以用来http.response.code == 500查找所有返回代码为 500 的响应,但我也希望能够看到这些响应的请求。
更新:我想自动执行此操作,以便我可以设置一个 tshark.exe 实例来记录某一天,并且只保存有趣的 HTTP 流量(有一个 WEBDAV 运行在同一台服务器上,有很多我不感兴趣的流量) )。
第二次更新:因为我主要想记录发送到 WebService 而不是 WEBDAVhttp.content_type contains "text/xml"的消息,所以我曾经过滤基于 xml 的消息。这不是我想要的 100%,而是生成足够小的日志以供进一步调试。
有没有办法模拟这些错误?我为它创建了一些自定义文件,但我想确保它们显示正确。我为每个虚拟主机发送了不同的消息。
先感谢您。
我正在开发一个 HTTP 服务器,它应该只允许每个用户有一定数量的连接。我如何优雅地告诉用户n不允许多个连接。我尝试n+1用 403回答th 请求,但显然这会杀死整个下载。(至少有DownThemAll!)
使用nginx,如何为不同的用户代理提供不同的静态文件?例如,如果当前用户正在使用 iPhone,则应为他们提供服务mobile_index.html,而应为所有其他用户代理提供服务browser_index.html。
找到解决方案:
server {
listen 80;
root /var/www;
set $mobile_request '0';
if ($http_user_agent ~ 'iPhone') {
set $mobile_request '1';
}
location =/ {
if ($mobile_request = '1') {
rewrite ^ /mobile_index.html;
}
if ($mobile_request = '0') {
rewrite ^ /browser_index.html;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一台运行在数据中心的 linux 服务器,它有一些额外的带宽和资源。
我想设置一个代理服务,以便我可以通过它从家里路由我所有的 http/https 流量。我知道如何配置我的浏览器与代理交谈,我只是不知道如何设置它的服务器端。我还想进行身份验证,以便只有我可以使用它
经过一些调试,我发现 mod_security 的核心规则集会阻止没有(可选!)ACCEPT 标头字段的请求。
这是我在日志中找到的内容:
ModSecurity:警告。需要匹配“rx ^OPTIONS$”与“REQUEST_METHOD”。[文件“/etc/apache2/conf.d/modsecurity/modsecurity_crs_21_protocol_anomalies.conf”] [行“41”] [id“960015”] [msg“请求缺少接受头”] [严重性“关键”] [标签“ PROTOCOL_VIOLATION/MISSING_HEADER"] [主机名 "example.com"] [uri "/"] [unique_id "T4F5@H8AAQEAAFU6aPEAAAAL"]
ModSecurity:访问被拒绝,代码为 400(第 2 阶段)。需要匹配“rx ^OPTIONS$”与“REQUEST_METHOD”。[文件“/etc/apache2/conf.d/modsecurity/optional_rules/modsecurity_crs_21_protocol_anomalies.conf”] [行“41”] [id“960015”] [msg“请求缺少接受头”] [严重性“
为什么需要这个标题?我知道“大多数”客户发送这些,但为什么他们的缺席被视为安全威胁?
我需要将所有传入的 HTTP 流量重定向到我的弹性负载均衡器上的 HTTPS。
我厌倦了使用 Apache mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
Run Code Online (Sandbox Code Playgroud)
利用负载均衡器添加的 X-Forwarded-Proto 标头,此规则应指示用户浏览器请求同一 URL 的 HTTPS 版本。
到目前为止它不起作用(没有重定向发生)。
我究竟做错了什么?
有一个更好的方法吗?
编辑:
这最终奏效了:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud) http ×10
apache-2.2 ×2
mod-security ×2
nginx ×2
.htaccess ×1
502 ×1
504 ×1
amazon-elb ×1
connection ×1
filter ×1
http-server ×1
https ×1
iis ×1
iis-7 ×1
linux ×1
proxy ×1
static-files ×1
useragent ×1
wireshark ×1