apache - Apache:RewriteCond %{QUERY_STRING} 问题
问题描述
我希望阻止http://anything.com/something.php?hack_attempt=select *
来自用户的请求。
为此我在 .htaccess
RewriteCond %{QUERY_STRING} ^.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
问题是这条规则也命中了http://anything.com/update.php
据我所知%{QUERY_STRING}
应该只包含 get params string after ?
,但它命中了 URI。谁能建议问题出在哪里?
更新:完整规则
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
#RewriteCond %{QUERY_STRING} ^.*(\.|\*|;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*/ban_url/ [NC,OR]
#RewriteCond %{QUERY_STRING} ^.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
RewriteCond %{QUERY_STRING} ^.*(md5|benchmark|union|insert|cast|set|declare|drop).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\?.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
RewriteRule ^(.*)$ - [R=400,L]
</IfModule>
如果我取消注释
RewriteCond %{QUERY_STRING} ^.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
那么 Apache 将阻止www.anything.com/update.php 但它应该只阻止 www.anything.com/something.php?param=update
更新 2:完整的配置
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
#RewriteCond %{QUERY_STRING} ^.*(\.|\*|;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*/ban_url/ [NC,OR]
#RewriteCond %{QUERY_STRING} ^.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
RewriteCond %{QUERY_STRING} ^.*(md5|benchmark|union|insert|cast|set|declare|drop).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\?.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
RewriteRule ^(.*)$ - [R=400,L]
RewriteCond %{REQUEST_URI} ^.*wp-* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*www\.zip* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*backup\.zip* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*public_html\.zip* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*\.tar\.gz* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*administrator* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*admin\.php* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*admin/index\.php* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*elrekt\.php* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*_adminer* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*accesson* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*agentui* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*trackback* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*wp-login* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*router\.php* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*AspCms_AdminAdd* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*public/js/wind* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*include/calendar/calendar-cn* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*app-ads* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*vendor/phpunit/* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*utility/* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*blackhat* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*data/admin/allowurl* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*js/varien* [NC,OR] #magento
RewriteCond %{REQUEST_URI} ^.*js/mage* [NC,OR] #magento
RewriteCond %{REQUEST_URI} ^.*magento_version* [NC,OR] #magento
RewriteCond %{REQUEST_URI} ^.*db_z\.php* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*functions\.php* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*lottery-index* [NC]
RewriteRule ^(.*)$ - [R=400,L]
</IfModule>
这个 conf 文件应用在站点 conf 中,例如
<VirtualHost *:80>
Include /var/www/url_blacklist.conf
ServerName ...
DocumentRoot ...
ErrorLog ...
</VirtualHost>
解决方案
我假设您想阻止/禁止所有那些select *
在其查询字符串中具有以及他们的 uri 没有update.php
请求的请求,如果是这种情况,您可以尝试关注一次。这些条件仅根据请求的条件编写,您可以尝试单独对其进行测试,然后也可以尝试将它们与您现有的条件合并。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/update\.php [NC]
RewriteCond %{QUERY_STRING} select \* [NC]
RewriteRule ^ - [R=301,F]
推荐阅读
- scala - 宏注释生成的伴随类的应用方法未解析
- angular - 如何在Angular 6中实现按价格范围过滤?
- python - 计算矩阵序列中的成对距离
- excel - 如何使这个 VBA 代码 - Excel 更有效率?
- java - JavaFX - 如何在计算机系统时钟的当前时间开始播放 24 小时视频(使用 javafx 媒体)?
- clojure - 如何在 Common Lisp 中将“应用函数”作为参数传递
- c# - 每次从数据库中获取相同的数据
- sql - 使用过滤器合并删除目标行的语法是什么?
- sql - 在不使用临时表的情况下优化查询并优化用户体验
- validation - 带有附加组件的 Google G-Suite 表单上的自定义验证