【问题标题】:How do I block unknown bots to my sites?如何阻止未知机器人访问我的网站?
【发布时间】:2015-04-12 07:09:36
【问题描述】:

我们的网站受到暴力攻击,我害怕禁止这些 IP,因为它们可能会在生命周期的某个时间轮换 IP 或合法用户。

我想阻止所有未知机器人访问我的网站。特别是我的 /wp-login.php 文件。

我花了几个小时试图找到执行此操作的代码。我当然愿意接受建议。但是有没有禁止未知机器人但不禁止谷歌之类的?

我在我的登录表单上设置了验证码,并将登录尝试限制为 3 次失败,然后锁定 36 小时,然后再失败 2 次,锁定 96 小时。然而,这并没有减缓攻击速度,而且它们似乎有无穷无尽的 IP 池可供选择。

除了普遍加强 WP 安全性之外,我最终做的是锁定对 wp-login.php 和 wp-admin 文件夹的访问。 非常简单快捷的设置指南http://support.hostgator.com/articles/specialized-help/technical/wordpress/wordpress-login-brute-force-attack 用于 wp-login.php 文件 锁定文件夹可以在任何 Cpanel 或 plesk 中轻松完成。

【问题讨论】:

  • 根据您的标签,我看到您正在考虑使用 .htaccess 和/或 robots.txt,它们都无法阻止恶意机器人,因为这些机器人只会忽略机器人文件,并且很可能会假装成为常规浏览器(UA 欺骗)。
  • 我认为第一个目标是弄清楚它们与正常流量的区别。如果不能,您可能只需将单个 IP 限制为每秒一定数量的请求。
  • 因为这似乎是一个 Wordpress 网站,所以有很多很棒的安全插件可以提供帮助。我在 Better Wordpress Security(现在称为 iThemes)方面取得了很好的成功。许多工具可以限制来自某些 IP 的流量等。wordpress.org/plugins/better-wp-security 上的信息

标签: html .htaccess robots.txt


【解决方案1】:

您可以使用 htpasswd 文件阻止对 wp-admin 目录的访问。使用this tool 生成和 htpasswd 文件。然后在 wp-admin 目录中创建一个新的 htaccess 文件,内容如下:

<FilesMatch "wp-login.php">
    AuthName "Admins Only"
    AuthUserFile /directory/with/htpasswd/file/
    AuthType basic
    require user putyourusernamehere
<FilesMatch "wp-login.php">

【讨论】:

  • 问题是 wp-login 已经被 PHP 密码保护了,所以再添加一个看起来有点矫枉过正
  • 我不确定这是否会有所帮助。他们正在尝试登录但不成功。 /wp-login.php 文件位于站点的根目录而不是 wp-admin 目录中。
  • @RobMcg : 更新了代码以匹配 wp-login.php 不是矫枉过正,机器人不能像普通的 HTML 表单一样自动填充通过 htpasswd 文件获得的浏览器提示。
  • 我非常愿意尝试一下,而且逻辑听起来很可靠。你能帮我完全实现它吗?我对服务器的东西不是很好。我知道 .htaccess 文件在哪里,但除了上述内容之外,我还需要在它的代码中添加什么其他内容吗?
  • @RobMcg 都是关于自动化基本 HTTP 身份验证的,对吧?要使其自动化,机器人只需要添加一个“授权”标题。类似于:授权:基本 QWxhZGRpbjpvcGVuIHNlc2FtZQ==。为什么你认为它不能自动化?它实际上比最初的基于 PHP 的登录更容易受到攻击,您至少可以实现用户锁定。
【解决方案2】:

我认为您不能阻止机器人访问您的网站,因为机器人可以模仿任何合法的 HTTP 流量。

相反,您应该专注于阻止您网站上的不良行为

您提到他们正试图暴力攻击您的网站。这是什么意思?他们是否用如此多的流量淹没了您的网站,从而降低了您的服务器速度?如果是这样,可能会将单个 IP 限制为每秒一定数量的请求。例如,如果一个 IP 每秒向您的服务发送 100 个请求,请将它们阻止 30 秒。

这个机器人是否试图猜测密码?如果是这样,请跟踪错误的密码尝试并在五秒钟内防止再次尝试。或者,使用 CAPTCHA 之类的东西来减缓自动密码更改尝试或可疑登录。

这些策略中的很多都可以通过路由器、第三方库来实现,如果您使用的是 WordPress,WordPress plugins

希望这会有所帮助!

【讨论】:

  • 我在我的登录表单上设置了验证码,并将登录尝试限制为 3 次失败,然后锁定 36 小时,然后再失败 2 次,锁定 96 小时。然而,这并没有减缓攻击速度,而且它们似乎有无穷无尽的 IP 池可供选择。
  • 是的,在我看来这是一个 DoS 漏洞。机器人现在可以锁定每个人的帐户。我认为登录尝试应该有 5 秒的延迟之类的。暴力破解密码需要 1,000 年的时间。如果他们用流量淹没您的服务器,我认为您对此无能为力。如果您可以控制比网站更多的带宽,则可以取消它们。
  • 此时我正在考虑从服务器中删除登录页面,并在需要时将其放回去。虽然我不确定这是否会打开整个网站的免费范围。
  • 是的,如果它只是那一页而没有其他页面但您需要访问它,请给它一个奇怪的名称。那么攻击者只会得到 404 错误。
  • 如果您需要访问权限以及一小群其他受信任的管理员,请给它起一个奇怪的名称并告诉其他人新名称,然后确保它永远不会被泄露。
【解决方案3】:

我在我的 WordPress 网站上使用了以下技巧:

RewriteEngine  on
RewriteBase /
RewriteRule ^<root-path>/wp-login\.php.*$ <root-path>/?error=404 [L]

如果有人试图访问登录页面,它将返回“页面未找到”。当我需要自己访问登录页面时,我只需将 .htaccess 文件中的最后一行注释掉即可。

.htaccess 文件位于我的网络根文件夹中。

【讨论】:

  • 这将是完美的,但几个合法用户需要随机编辑网站
  • 同意,如果您有很多用户访问管理页面,这可能会出现问题,但如果管理员也可以访问网站文件夹,它会起作用。绝对适合我,因为我是我网站上唯一的管理员 :)
  • 如果您使用这种类型的解决方案,您可以添加一个检查特定查询字符串值的规则:RewriteCond %{QUERY_STRING} !(^|&amp;)letmein=true($|&amp;) 如果该查询字符串不存在,则只需重定向回索引页面。这样您就不必每次要更新站点时都编辑 htaccess 文件。
  • 好点可以用于多个用户,但是由于您开始在查询字符串中使用某个秘密,它不能再被视为秘密,所以在我看来它不太安全。
【解决方案4】:

我昨天测试了从 Theme Forest 中隐藏我的 Wp,它的功能给我留下了深刻的印象。它可能正是您正在寻找的。查看:http://codecanyon.net/item/hide-my-wp-no-one-can-know-you-use-wordpress/4177158

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2016-10-28
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2014-09-27
    • 2013-06-10
    相关资源
    最近更新 更多