【问题标题】:Block users from accessing cron job script阻止用户访问 cron 作业脚本
【发布时间】:2016-06-19 19:52:00
【问题描述】:

我有一个每小时运行一次的 PHP 脚本(cron 作业)来清理/删除数据库中临时视图表中的视图。

目前,网址是:

http://example.com/api/clean.php

但是,任何用户都可以访问,因此脚本可以由于有人访问链接而运行,并且很容易猜到。

如果我将 URL 设为随机字符串:

http://example.com/api/090b235e9eb8f197f2dd927937222c5703.php

有没有人能够“发现”它来运行脚本?有没有更好的方法来阻止人们访问脚本?

【问题讨论】:

  • 为什么在这个过程中会涉及到网络服务器?关于复杂的 URL,是的 - 它不安全。如果您必须使用网络服务器,请至少使您的 php 脚本需要 $_POST 参数或握手。
  • @Axalix 你是什么意思?
  • 你能从控制台调用这个脚本吗:php /web/my-site/application/api/clean.php?
  • 把脚本放到Web根目录外

标签: php cron


【解决方案1】:

我在外部托管的PHP 应用程序中遇到了类似的问题。解决方案是对包含所有管理脚本(包括与 cron 作业相关的脚本)的文件夹进行密码保护,因此不能公开访问文件夹内容。

我的解决方案是针对 Linux 的,涉及配置through .htaccess file

AuthName "Admin" 
AuthType Basic
AuthUserFile /home/conf/httpd/htpasswd/...
Require valid-user

密码文件和.htaccess文件是托管公司通过他们的面板自动生成的,但我可以访问和更改.htaccess文件。

解决了绕过目录密码保护here:

http://user:pass@example.com/api/clean.php

【讨论】:

    【解决方案2】:

    大多数数据库都具有执行此类操作的功能。在 mySQL 中你可以设置一个事件

    DELIMITER $$
    
    -- SET GLOBAL event_scheduler = ON$$     -- required for event to execute but not create    
    
    CREATE  /*[DEFINER = { user | CURRENT_USER }]*/ EVENT `dbName`.`eventName`
    
    ON SCHEDULE
         /* uncomment the example below you want to use */
    
        -- scheduleexample 1: run once
    
           --  AT 'YYYY-MM-DD HH:MM.SS'/CURRENT_TIMESTAMP { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] }
    
        -- scheduleexample 2: run at intervals forever after creation
    
           -- EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...]
    
        -- scheduleexample 3: specified start time, end time and interval for execution
           /*EVERY 1  [HOUR|MONTH|WEEK|DAY|MINUTE|...]
    
           STARTS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1[HOUR|MONTH|WEEK|DAY|MINUTE|...] }
    
           ENDS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] } */
    
    /*[ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']*/
    
    DO
        BEGIN
            (sql_statements)
        END$$
    
    DELIMITER ;
    

    http://dev.mysql.com/doc/refman/5.7/en/create-event.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-31
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      相关资源
      最近更新 更多