2016-01-06 59 views
0

如何在下面的情况下避免DoS攻击?睡眠中的DoS函数PLSQL

CREATE OR REPLACE FUNCTION slow_function (
    p_in INT 
AS 
BEGIN 
    DBMS_LOCK.sleep(p_in); 
END; 
) 
+1

我不认为一个单独的PL/SQL函数与它内部的睡眠是拒绝服务攻击的理由?睡眠不会影响当前的会话吗?如果是这样,你如何管理会议?你如何公开这个功能? – Drumbeg

+0

锁定对该功能的访问(或者更好的是,不要将其暴露给用户)。 – Ollie

回答

0

DBMS_LOCK.SLEEP不使用任何重要资源。没有任何特定的功能会导致拒绝服务攻击。相反,这可能是任何人都可以执行的最安全的功能之一。

为了证明这一点,我在PC上运行了下面的测试案例,以模拟100个会话同时调用该函数。即使有100个会话,oracle.exe使用的CPU也不到1%。

CREATE OR REPLACE FUNCTION slow_function (
    p_in INT) RETURN NUMBER 
AS 
BEGIN 
    DBMS_LOCK.sleep(p_in); 
    RETURN 1; 
END; 
/

select /*+ parallel(100) */ slow_function(60) from dba_tables; 

--In another session, check that statement is really using 100 sessions. 
select * from v$px_process;