我正在检查我的日志并注意到以下内容
[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
我从未见过这样的事情。我应该担心吗?有什么办法可以防止这些代码在我的网站上运行吗?
由于
答案 0 :(得分:1)
该错误表示有人试图点击/xxx/join.php并向其传递一些异常数据。
该文件不存在,因此此操作实际上并未对它们产生任何有用的信息。
他们可能会尝试其他事情(和其他人一样)。
答案 1 :(得分:1)
'dirt'的评论非常不好的建议。
在输入到达应用程序逻辑之前验证输入是非常困难的 - 到那时,您的示例目标已被利用的漏洞。你永远不应该清理输入(出于多种原因) - 接受或拒绝它 - 但你必须始终清理输出。
您在日志中看到的大部分内容都是尝试破坏您的系统失败(成功的攻击不会留下证据)。但是检测失败的攻击是防止成功攻击的一种非常有用的方法 - 如果你在Unix / Linux上运行,fail2ban可以监视日志中的异常情况并注入防火墙规则来阻止该客户端。
不要浪费你的时间对单一事件的膝盖反应。如果您对网站的安全性非常认真,那么最好的建议是规划如何保护您的网站,规划如何检测您是否已被入侵,并计划如何在服务被恢复后恢复服务受到损害。
在SANS和OWASP设置安全服务器方面有很多有用的东西。对于将服务器插入互联网的任何人来说,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)具有非常有用的信息。