在.htaccess中阻止SQL注入的危险是什么?

时间:2014-06-27 13:31:44

标签: .htaccess security sql-injection firewall

我一直在寻找我的Wordpress网站上的防御。不出所料,有关此主题的大量文档。其中两个更好的指南似乎在这里:

http://moz.com/blog/the-definitive-guide-to-wordpress-security

显然:http://codex.wordpress.org/Hardening_WordPress

我想加强我对SQL注入的防御,因为我以前的网站成为这种攻击的牺牲品,并证明几乎不可能再次清理。

根据许多其他网站和类似指南上发表的评论,似乎有很多人不同意每一个实现这一目标的方式,因为有人咒骂。

我正在考虑将以下内容(在第一个提到的网站上找到)添加到我的网站,但似乎没有任何地方谈论执行此类操作的危险超出了编辑{{{}的明显危险1}}文件。

通过添加此功能,我可以期望松散或妥协的功能,如果没有,为什么这种代码不包含在基本的Wordpress安装中?如果添加这种东西没有害处,为什么不是每次安装都包含它,并允许知道他们正在做什么的开发人员在必要时删除它?

.htaccess

鉴于我有限的SQL知识,我担心打破数据库搜索功能,例如基于URL的查询 (例如在wp-admin中,如 ## SQL Injection Block ## <IfModule mod_rewrite.c> RewriteBase / RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC] RewriteRule ^(.*)$ - [F,L] RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR] RewriteCond %{QUERY_STRING} boot\.ini [NC,OR] RewriteCond %{QUERY_STRING} tag\= [NC,OR] RewriteCond %{QUERY_STRING} ftp\: [NC,OR] RewriteCond %{QUERY_STRING} http\: [NC,OR] RewriteCond %{QUERY_STRING} https\: [NC,OR] RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR] RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR] RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR] RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)||ê|"|;|\?|\*|=$).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*("|'|<|>|\|{||).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC] RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$ RewriteRule ^(.*)$ - [F,L] </IfModule>

简而言之:

  • 我的主要问题是在users.php?s=rachel&action=-1&new_role&paged=1&action2=-1中限制SQL注入的危险是什么,即wordpress,函数或插件是否依赖于能够通过此类操作更改数据库。我有一个自定义主题并在很多页面上使用自定义php,但总是使用已知的wordpress函数来添加数据,而不是直接写入SQL查询或编辑。

1 个答案:

答案 0 :(得分:5)

由于以下原因,这没用:

  1. 定义规则以捕获每次可能的注射是不可能的。您仍然需要在应用程序代码(即绑定参数)中进行适当的防御以确保安全。如果您的代码得到了妥善保护,则无需进行此URL过滤。

  2. 这只会过滤网址。 SQL注入也可能来自POST变量。如上所述,您需要在应用程序代码中使用防御来防御它。

  3. 规则很可能会如此宽泛以至于阻止合法流量(例如,/article.php?title=us-declares-war会被其中一条规则阻止)。