我们有一个目录是开放的网站,我们放置实用程序脚本,其中一些用于提交电子邮件,另一些用于调用我们的web服务的通用功能。
在我的PHP错误日志中,我经常收到通知和警告,脚本中使用的数据存在问题,比如“未定义的索引”或“试图获取非对象的属性”。
这些脚本中有几个我知道已经不再被使用了,但是在日志文件中仍然有来自试图运行这些脚本的-某人的条目。
我能做些什么来防止这种情况在我的合法脚本中发生呢?它们需要利用web,因为它们是通过ajax从多个页面调用的。
更新-
我发现,它们之所以能够由机器人运行,是因为目录没有目录列表的保护;这意味着机器人在没有真正知道它们做了什么的情况下就读取了清单并从那里运行。
我在我的.htaccess中添加了防止目录列表的选项,我将监视一些事情,看看它是否有用。
在另一个提示中,所有建议通过IP或密码阻止的人保护他们.在检查一些日志文件后,检查IP将无法工作,因为脚本是从服务器、PHP脚本中调用的,并且是通过客户端的ajax调用的。此外,要使用密码进行保护,意味着我必须修改调用脚本的每个地方来传递该密码。
希望我的mods能帮上很大的忙,但它可能不会阻止那些已经知道脚本在那里的机器人。
发布于 2014-03-27 15:38:58
我添加了一个选项来防止目录列表到我的.htaccess中。
这使得机器人将脚本的执行降低到几乎为零。我可以接受我现在收到的电话号码。
发布于 2014-03-04 15:36:08
您可以/应该使用IP限制或登录来保护这些脚本。这两者都可以通过.htaccess文件来完成。对于简单的实用程序脚本来说,这可能就足够了。但是,您不应该在复杂和安全的应用程序中使用这样的东西。
示例.htaccess文件:
# BAN USER BY IP
<Limit GET POST>
order allow,deny
allow from all
deny from 1.2.3.4
</Limit>
# login
AuthName "Test"
AuthType Basic
AuthUserFile test/.htpasswd
require valid-user示例.htpasswd文件
test:Qh8a4zM4Z/i1c甚至还有这些文件的生成器。谷歌发现的一些例子:http://www.toshop.com/htaccess-generator.cfm
发布于 2014-03-04 15:36:40
不要直接调用PHP脚本,也不要使脚本可以直接调用。这是最终目标。很可能你现在还不能实现。
如果采用面向对象的方法,那么所有的PHP文件都只包含类。这意味着当您运行一个文件时,什么都不会发生。
只有1文件才是实际的脚本,这是您的入口点。
您收到这些undefined index消息可能是因为您没有验证您的输入(或者有bug)。
看到这样的脚本是很常见的:
if ($_GET["action"] === "edit") {
// edit
} else if ($_GET["action"] === "delete") {
// delete
}您希望调用脚本为:action.php?action=edit,但是如果您将它称为:action.php呢?你会得到undefined index "action"
添加输入验证,如:
if (isset($_GET["action"]) === false) {
throw new Exception("Invalid input");
}如果文件不再使用,请删除它。如果您不希望从网络上访问文件,请将其移出webroot。
https://stackoverflow.com/questions/22176185
复制相似问题