2012-08-07 80 views
0

好吧,我一直在寻找网络,我似乎无法找到任何解决方案,我的问题。如果过去有人问过我的道歉,我很抱歉。自己激活的PHP脚本

我敢肯定有一个非常简单的答案:后来我为客户建立了一个网站。这个网站有一个管理系统,其中一些页面被锁定使用一个名为'level'的$ _SESSION变量,它基本上检查用户是否是管理员。此外,有些页面会锁定会话变量的常规登录,以确保只有登录的用户才能访问这些页面。

现在的问题是,在我的两个页面上,php脚本似乎完全由自己运行。第一页只是将所有激活电子邮件重新发送给数据库中的每个用户的页面。此页面只能通过登录并成为管理员才能访问。第二页只能通过PayPal访问。 PayPal脚本具有后备支持,可检查是否存在PayPal发布变量。

任何人都知道为什么这些脚本自己运行?当随机电子邮件不断发送给客户或管理员时,它会变得非常麻烦。我可能在某处做错了什么。我认为这可能只是Google抓取工具激活脚本,但是抓取工具是否需要登录才能访问脚本?

+0

您是否可以访问Web服务器日志文件并查看谁(如果有人)正在调用这些脚本页? – Adrian 2012-08-07 05:40:55

+0

可能被[的cronjob(http://en.wikipedia.org/wiki/Cron) – Hawili 2012-08-07 05:41:04

+0

这将是很高兴看到一些代码,否则这将是非常困难的,看看是否有什么不对劲的地方... – 2012-08-07 05:41:09

回答

0

这可能是一些事情。

一种方法可能是搜索引擎正在执行您的脚本。

几年前,我被聘请了解可能会导致删除使用他们自制CMS制作的所有网页的原因。

通过他们的访问日志发现,有两个搜索引擎试图为管理前端的内容建立索引。包括所有的删除页面的链接。

这可能发生的原因是两件事的结合。

第一个是来自两个搜索引擎的管理员浏览器插件。文档证明,访问过的客户端页面已从他们的插件发送到搜索引擎。其次,当搜索引擎尝试索引会话保护页面时,他们CMS的原始开发人员忘记在header('Location: ...');部分之后放置exit;,这意味着该页面上的其余代码仍然被执行。

解决方案

我加入exit;的代码解决了这一问题:

If(! isset($_SESSION['level'])) 
{ 
    header('Location: login.php'); 
    exit; // stops further execution of code 
} 

我希望这可以帮助。

+0

啊!我错过了我的退出,你是对的。这是否会解决问题,我不太确定,只能拭目以待。谢谢你,小伙伴! – Hiriji 2012-08-11 11:14:28

0

检查服务器的访问日志,查看何时调用这些页面(如果正在调用它们)。

如果有什么东西在访问那些不应该存在的页面(蜘蛛,人物等),那么存在安全问题。

我很怀疑这些脚本是“自称”

+0

我也没有看到脚本自称,会很奇怪。日志看起来很干净。我试过Repox的解决方案,现在我要做的就是观察这个问题是否确实解决了问题,但看起来相当可能。 – Hiriji 2012-08-11 11:15:55

0

要了解为什么他们被称为中,检查后如果会话变量被设置,你会发现它是没有,添加

file_put_contents('./log/log.txt', print_r($_SERVER)); 

创建一个自己的目录“log”和一个writabel文件“log.txt”,源文件应该出现在那里。

其他有用的函数是debug_backtrace()。使用这一点有点棘手,但:

if ($handle = @fopen('./log/log.txt', 'a')) { 
    for ($i=1; $i<count($aBack); $i++) { 
     if (isset($aBack[$i]['file'])) { 
      fwrite($handle, $aBack[$i]['file'] . '/' . $aBack[$i]['line'] . "\n\r"; 
     } else { 
      fwrite($handle, 'Anonymous function' . "\n\r"; 
     } 
    } 
    fclose($handle); 
} 

应该给你一个使用什么誓言的日志。 (代码输入逐字 - 对错别字,但你应该能够从那里工作)

请注意,大多数客户端信息(IP,referer等)是可以原谅的,但调用URI不是。它会给你很多关于什么叫他们的信息。