1

我正在检查我的日志并注意到以下内容

[Tue Apr 02 16:12:02 2013] [error] [client 31.181.33.208] File does not exist:/xxx/join.php+++++++++++++++++++++++++++++++++++++++++++++++++++Result:+\xed\xe5+\xed\xe0\xf8\xeb\xee\xf1\xfc+\xf4\xee\xf0\xec\xfb+\xe4\xeb\xff+\xee\xf2\xef\xf0\xe0\xe2\xea\xe8;, referer: http://www.edrobe.com/join.php+++++++++++++++++++++++++++++++++++++++++++++++++++Result:+%ed%e5+%ed%e0%f8%eb%ee%f1%fc+%f4%ee%f0%ec%fb+%e4%eb%ff+%ee%f2%ef%f0%e0%e2%ea%e8%3b

我从来没有见过这样的事情。我应该担心吗?我能做些什么来防止此类代码在我的网站上运行吗?

谢谢

4

3 回答 3

1

该错误表明有人试图点击 /xxx/join.php 并向其传递一些不寻常的数据。

好消息是:

该文件不存在,因此此操作并没有真正为他们带来任何有用的结果。

坏消息是:

他们可能会尝试其他事情(其他人也会)。

需要考虑的事项

  • 清理用户输入是个好主意
  • 保护您允许上传的文件夹是一个好主意(无论是通过权限还是通过您的 Web 服务器配置)。
  • 您还可以使用防火墙来阻止来自该 IP 和/或一系列 IP 的流量。
于 2013-04-03T12:30:27.213 回答
1

“污垢”的评论是非常糟糕的建议。

在输入到达您的应用程序逻辑之前验证输入是非常困难的 - 到那时您的示例目标的漏洞已经被利用。你永远不应该清理输入(出于多种原因)——要么接受它,要么拒绝它——但你必须始终清理输出。

您在日志中看到的大部分内容是尝试破坏系统的失败尝试(成功的攻击不会留下证据)。但是检测失败的攻击是防止成功攻击的一种非常有用的方法——如果你在 Unix/Linux 上运行,fail2ban可以监控你的日志中的异常情况并注入防火墙规则来阻止该客户端。

不要把时间浪费在对单一事件的下意识反应上。如果您认真对待您网站的安全性,那么最好的建议是计划如何保护您的网站,计划如何检测您是否已被入侵,并计划在服务被入侵后如何让服务重新上线妥协。

在SANSOWASP设置安全服务器有很多有用的东西。对于任何将服务器插入互联网的人来说,这应该是必不可少的阅读材料。特别是对于 PHP,看看Suhosin

如果您在共享主机上并且只能访问 .htaccess,那么您就没有安全性 - 您所能做的就是纠缠您的服务提供商实施适当的安全措施并在网站被破坏时重新上传您的网站。

于 2013-04-03T12:35:15.800 回答
1

您所能做的就是尽可能保护您的网站。除非您明确成为目标,否则攻击者只会转移到受保护程度较低的站点。

一些建议:

使用正则表达式。这限制了用户可以提交的可能输入。在新的 HTML5 中,您可以向输入标签添加模式参数。例如:

<input type="tel" name="phone" max="20" pattern="\d{3}[\-]\d{3}[\-]\d{4}">

HTML5 也有新的输入类型,但并不是所有的浏览器都支持这些,所以最好包含模式。HTML5Pattern.com具有各种输入类型的通用模式。您可能已经注意到,您还可以限制输入的长度。如果您知道输入不能超过 X 个字符,请不要让用户输入超过 X 个字符。

如果您的用户输入存储在数据库中,PHP 数据库扩展具有转义字符串的功能。因此,任何特殊的 alt 代码字符或函数都不会被执行,而是作为文字字符串输入。

对于 PostgreSQL:pg_escape_string()
对于 MySQL:mysql_real_escape_string()

存在其他功能,例如stripslashes()从输入中删除斜杠,从而禁用特殊字符。

遵循上述操作,您已经防止:
-
提交错误输入 - 提交的错误输入无效
- 保护您的数据库免受 SQL 注入

您还可以将服务器配置为阻止攻击源自的 IP 地址。如果您的服务器在 Linux 上,此参考指南 (pdf)包含非常有用的信息。

于 2013-04-03T12:46:36.530 回答