我有一个每小时运行一次的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()
有人能够“发现”它来运行脚本吗?有没有更好的方法阻止人们访问脚本?
答案 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=' '+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>
答案 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