我正在寻找方法来强化" WordPress安装和最近遇到的一些代码放在网站.htaccess文件中。但是,它没有解释它的作用,我试图解决它,但收效甚微。
代码/规则是:
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ ///.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\=?(http|ftp|ssl|https):/.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\?.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(asp|ini|dll).*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(htpasswd|htaccess|aahtpasswd).*\ HTTP/ [NC]
RewriteRule .? - [F,NS,L]
我可以看到,当第一行中的任何页面被调用时,它会发挥作用,但除此之外,我会在黑暗中。
任何指针/解释都会非常感激。
P.S。如果有更好的地方发布,请告诉我,我很乐意移动它。
答案 0 :(得分:1)
简而言之,所提到的规则通过阻止特定请求来提高安全性,如下所示:
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
从上一条规则开始,上面排除URI的行以/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/
中的任何一个开头。
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ ///.*\ HTTP/ [NC,OR]
上面的这一行是为了防止请求在URI的开头有两个以上的斜杠//
,实际上这会阻止路径等效https://cwe.mitre.org/data/definitions/50.html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\=?(http|ftp|ssl|https):/.*\ HTTP/ [NC,OR]
以上这一行是为了防止出现一种跨站点脚本(XSS),这里有一个示例http://cwe.mitre.org/data/definitions/79.html以下代码根据HTTP GET用户名参数在网页上显示欢迎消息:
$username = $_GET['username'];
echo '<div class="header"> Welcome, ' . $username . '</div>';
因为参数可以是任意的,所以可以修改页面的url,因此$ username包含脚本语法,例如:
http://trustedSite.example.com/welcome.php?username=<Script Language="Javascript">alert("You've been attacked!");</Script>
这会导致弹出无害的警报对话框。
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\?.*\ HTTP/ [NC,OR]
上述行会阻止请求带有问号两次,例如??
,因为在某些情况下,此漏洞可能会被网络浏览器利用,您可以在此处阅读更多内容https://www.securityfocus.com/bid/4876/exploit和此处{{ 3}}
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(asp|ini|dll).*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(htpasswd|htaccess|aahtpasswd).*\ HTTP/ [NC]
上述两行将阻止任何具有.dll
或.htaccess
等扩展名的请求。
RewriteRule .? - [F,NS,L]
最后一行将导致服务器为所有捕获的请求返回403 Forbidden状态代码。