2016-03-06 28 views
1

我有一個每小時運行一次的PHP腳本(cron作業)來清理/刪除數據庫中臨時視圖表中的視圖。阻止用戶訪問cron作業腳本

目前,網址是:

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

然而,這是任何用戶訪問,因此該腳本可以運行,由於有人訪問該鏈接,很容易猜到。

如果我做了一些URL隨機字符串:

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

會有人能夠「發現」它運行腳本?有沒有更好的方法來阻止人們訪問腳本?

+0

爲什麼一個Web服務器參與了這個過程呢?關於複雜的URL,是的 - 它不安全。如果你必須使用網絡服務器,至少應該這樣做,你的php腳本會期待$ _POST參數或握手。 – Axalix

+0

@Axalix你是什麼意思? – frosty

+0

你可以從控制檯調用這個腳本:'php/web/my-site/application/api/clean.php'嗎? – Axalix

回答

1

大多數數據庫都有這種類型的功能。在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

0

我與外部託管的一個PHP應用了類似的問題。解決方案是密碼保護包含所有管理腳本(包括與cron作業相關的腳本)的文件夾,因此沒有公共訪問文件夾內容的權限。

我的解決方案是爲Linux和參與配置through .htaccess file

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

密碼文件和.htaccess文件會自動由託管公司通過其面板生成的,但我可以訪問和更改.htaccess文件。

繞過目錄密碼保護解決here

http://user:[email protected]/api/clean.php