站点日志和PHP保护

时间:2013-04-03 12:08:22

标签: php .htaccess logging

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

[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

我从未见过这样的事情。我应该担心吗?有什么办法可以防止这些代码在我的网站上运行吗?

由于

3 个答案:

答案 0 :(得分:1)

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

好消息是:

该文件不存在,因此此操作实际上并未对它们产生任何有用的信息。

坏消息是:

他们可能会尝试其他事情(和其他人一样)。

需要考虑的事项

  • 清理用户输入是一个好主意
  • 保护允许上传的文件夹是一个好主意(包括权限和通过您的网络服务器配置)。
  • 您还可以使用防火墙阻止来自此IP和/或一系列IP的流量。

答案 1 :(得分:1)

'dirt'的评论非常不好的建议。

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

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

不要浪费你的时间对单一事件的膝盖反应。如果您对网站的安全性非常认真,那么最好的建议是规划如何保护您的网站,规划如何检测您是否已被入侵,并计划如何在服务被恢复后恢复服务受到损害。

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

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

答案 2 :(得分: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上,则此reference guide (pdf)具有非常有用的信息。