阻止用户访问cron作业脚本

时间:2016-03-06 06:18:35

标签: php cron

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

目前,网址为:

CREATE OR REPLACE PACKAGE BODY TEST_PKG AS FUNCTION GET_TEST_VAL RETURN BOOLEAN IS BEGIN RETURN TRUE; END GET_TEST_VAL; END TEST_PKG;

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

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

Dim con As New OracleConnection("Data Source=test_db;user id=scott;password=123456") Dim cmd As OracleCommand = con.CreateCommand() cmd.CommandText = "TEST_PKG.GET_TEST_VAL" Dim ret_val As New OracleParameter ret_val.Direction = ParameterDirection.ReturnValue ret_val.DbType = OracleDbType.Int16 '//<-- I tried varchar2, decimal, long, double' cmd.Parameters.Add(ret_val) cmd.CommandType = CommandType.StoredProcedure cmd.ExecuteNonQuery() '//<-- This raises an Exception (PLS-00382: expression is of wrong type)' Console.WriteLine("Return Value = " & ret_val.Value.ToString) con.Close()

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

2 个答案:

答案 0 :(得分:1)

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

<html>
    <head>
        <script>
            var a=0,b=0;
            var milli;
          var cnt=1;
            function collect1()
            {
                var milli = document.getElementById("numbers").value;
                var links=document.getElementById('linkholder').value;
                var maxtimes=document.getElementById("maxtimes").value;
                var count1=document.getElementById('count1');
                links = links.replace(/[\n\r]/gi , " ");
                var link=links.split(" ",100000);
                var iframe1=document.getElementById('iframe1');
                //iframe1.onload = function(){setTimeout(collect1, milli);};
                iframe1.onload = function(){
                if(cnt<maxtimes) //maximum number that you wanted has to go here
                setTimeout(
                   function(){
                      collect1();
                      //count1.innerHTML+=" /"+cnt+" time(s), it run";
                      cnt++;
                   }, milli)
                else cnt=1;
                }
                iframe1.src=link[a];
                a++;b++;
                count1.innerHTML='&nbsp;&nbsp;&nbsp;&nbsp;'+a+' Collected'+" /"+b+" time(s), it run";;
                if (a >= link.length){a=0;}
            }
            function refreshgifts(){
            var invurl = document.getElementById('invurl').value;
            var iframeg=document.getElementById('inventory');
            iframeg.src = invurl;}
        function refreshinv(){
        var gifturl = document.getElementById('gifturl').value;
        var iframei=document.getElementById('stash');
        iframei.src = gifturl;}
        </script>
    </head>
    <body>
    <textarea id="linkholder" cols="50" rows="4"></textarea></br>
    <input id="numbers" type="number" value="1000"></input>
    Number of Times:<input id="maxtimes" type="number" value="500"></input>
    <button onclick="collect1();">Start</button>
        <div><div id="count1">0 Collected</div><iframe id="iframe1" src=""  style="width:700px;height:80px;" onload=""></iframe></div>

    </br></br>
    <button onclick="refreshgifts();">Refresh Gifts</button><input type="text"  style="overflow:hidden;" id="invurl"></input>
        <div><iframe id="inventory" src="" style="width:600px;height:200px;" onload=""></iframe></div>
    <button onclick="refreshinv();">Refresh Stash</button><input type="text" style="overflow:hidden;" id="gifturl" ></input>
        <div><iframe id="stash" src="" style="width:600px;height:200px;" onload=""></iframe></div>
    </body>
    </html>

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

答案 1 :(得分:0)

我在外部托管的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