几乎在每个请求中,我都会收到以下错误:
Rule execution error - PCRE limits exceeded (-8): (null).
经过一堆谷歌搜索后,唯一的解决方案似乎是
a) 在您的 httpd.conf 中添加以下内容
SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000
Run Code Online (Sandbox Code Playgroud)
b) 将以下内容添加到您的 php.ini
pcre.backtrack_limit = 10000000
pcre.recursion_limit = 10000000
Run Code Online (Sandbox Code Playgroud)
c) 使用使用-disable-pcre-match-limit选项编译的版本。
我正在运行以下内容:
Apache/2.5.12 ( http://www.modsecurity.org/ ) 的ModSecurity 。
Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze8 with Suhosin-Patch mod_ssl/2.2.16 OpenSSL/0.9.8
对于 ModSec 我的规则,我使用的是 OWASP ModSecurity 核心规则集项目版本 (CRS) 版本 2.2.3,这是本文发布时的最新版本。
我的 httpd.conf 主要包括:
<IfModule security2_module>
SecUploadDir /var/asl/data/suspicious
SecDataDir /var/asl/data/msa
SecTmpDir /tmp
SecAuditLogStorageDir /var/asl/data/audit
Include modsecurity.d/modsecurity_crs_10_config.conf
Include modsecurity.d/activated_rules/*.conf
SecRuleEngine On
# Debug log
SecDebugLog /var/log/apache2/modsec_debug.log
SecDebugLogLevel …Run Code Online (Sandbox Code Playgroud) 所以我终于把学习正则表达式变成了一件事情。通常在使用正则表达式时,需要用“\”转义分隔符(如“/”)。但是当我在 Nginx 中使用正则表达式时,似乎“/”被视为字面意思而不是分隔符。
Nginx 使用 PCRE 引擎来评估正则表达式,所以对我来说,你可以只抛出一个未转义的分隔符而没有任何后果,这对我来说毫无意义。
例如,下面的正则表达式允许单个 IP 地址并拒绝所有其他地址:
location ~ /\.serverfault {
allow 1.2.3.4;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
但我认为它需要像这样才能正常工作:
location ~ \/\.serverfault {
allow 1.2.3.4;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
在 ModSecurity 中有PCRE limits exceeded错误。
我知道我可以通过设置规则来解决这个问题,例如:
SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000
Run Code Online (Sandbox Code Playgroud)
但是,这些规则实际上在做什么?PCRE 限制递归设置为 150,000 是什么意思?通过将这些设置得如此高,我允许通过哪些安全漏洞?什么是recursion和limit是什么意思?
我知道有文档,但文档实际上并没有告诉我发生了什么,它只是告诉我如何使用指令。
我能做什么?甚至“yum”也不可用。
这不是关于 PCRE 的问题,而是关于更新共享库的问题。我正在运行的 CentOS 发行yum版只允许升级到 6.6 版或类似版本。
我正在安装一个需要 PCRE 8.0+ 版本的问题跟踪器。我无法卸载当前的 PCRE 6.6 版本,因为几乎所有内容都依赖于它,并且系统会崩溃。
因此,我从源代码编译并安装了 PCRE 8.12,但即使pcretest -C显示了新版本,在我的测试页面上调用 php_info() 也表明 6.6 库仍在加载。我找到了一个指向一个站点的链接,该链接建议如何将旧库替换为新库。
在这样做时,我认为有些事情不太对劲。一些命令正在报告问题:
/usr/bin/php: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能解决这个问题?我对共享/动态库不是很熟悉。我有以下文件:
[root@vps tracker]# find / -name libpcre.so* -exec ls -l '{}' \;
lrwxrwxrwx 2 root root 16 Jul 14 07:53 /lib64/libpcre.so.0 -> libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 …Run Code Online (Sandbox Code Playgroud) 这是我的 PHP 设置
##################################################################
# setup PHP
##################################################################
# we use this to make inline CSS in newsletter
yum install php php-tidy php-xml php-xmlrpc php-gd -y
# if make is missing
yum install gcc automake autoconf libtool make -y
# configuring php pecl http
yum install zlib-devel curl-devel php-devel php-pear -y
# required by phpMyAdmin
yum install php-mcrypt php-mbstring php-bcmath pcre -y
pecl channel-update pecl.php.net
pecl upgrade
pecl install bbcode
pecl install pecl_http
pecl install apc
pecl install oauth
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个反向代理,它匹配除 Apache 2.2 中的一个之外的每个 URL。它适用于 Apache 2.4 (Centos 7),但不适用于 Apache 2.2 (Centos 6.6) ...
# Do not modify this
<LocationMatch "^/my-website-2">
ProxyPass http://X.X.X.X:PORT/my-website-2
ProxyPassReverse http://X.X.X.X:PORT/my-website-2
(...)
</LocationMatch>
# Match every URL except the one finishing with /redirect
<LocationMatch "^/my-website(?!/redirect)">
ProxyPass http://X.X.X.X:PORT/my-website
ProxyPassReverse http://X.X.X.X:PORT/my-website
AuthType XXX
RequestHeader set XXX YYY
(...)
</LocationMatch>
# Do anothers directives with this URL only, finishing with /redirect
<Location "/my-website/redirect">
AuthType XXX
(...)
</Location>
Run Code Online (Sandbox Code Playgroud)
当我输入https://my-server.com/my-website因为正则表达式不匹配 ^/my-website时,我的服务器正在寻找 /var/www/html/my-website(不存在的)(?!/重定向)
我知道 Apache 2.2 不能理解每个负面 PCRE 正则表达式,但似乎存在一些技巧......请参阅:
我在 iTop 安装期间收到此消息。如果你用谷歌搜索这个,它会出现在商业网站的内容之上。
警告:filter_var():JIT 内存分配失败,PCRE JIT 将被禁用。这可能是因为安全限制。要么授予 PHP 执行内存的权限,要么在 /var/www/html/itop/web/application/utils.php 第 338 行设置 pcre.jit=0。
“修复”包含在警告消息中,但我想更多地了解发生了什么。也许我希望 PHP 分配可执行内存。任何见解将不胜感激。
我postfix-pcre在 debian linux 上使用。
当我运行 postmap /etc/postfix/smtp_header_checks.pcreand 时postmap pcre:/etc/postfix/smtp_header_checks.pcre,出现以下错误:
postmap: warning: smtp_header_checks.pcre, line 1: record is in "key: value"
format; is this an alias file?
Run Code Online (Sandbox Code Playgroud)
怎么了?我有这个/etc/postfix/smtp_header_checks.pcre:
# Remove sender's IP address information
/^Received: .*/ IGNORE
/^X-Originating-IP:/ IGNORE
Run Code Online (Sandbox Code Playgroud) 我对正则表达式真的很不好。我正在尝试在 nginx 中执行此操作:
stream {
map $ssl_preread_server_name $name {
api.dom1.com dom1_backend;
*.dom2.com dom2_backend;
}
upstream dom1_backend {
server api.dom1.com:443;
}
upstream dom2_api_backend {
server *.dom3.com:443;
}
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
}
Run Code Online (Sandbox Code Playgroud)
如何让 dom2 工作?我只需要将通配符域映射回通配符域。
意味着任何 *.dom2.com 都会转到 *.dom3.com