Code can be scary when you simplify it
Disclaimer: I’m not posting to make me look better, we’ve all written code that we’re later ashamed of, and I’m no different!
This is some code I discovered buried in a system some time ago. I’ve kept a copy of it because it illustrates a number of things NOT to do:
FUNCTION password_is_valid (in_password IN VARCHAR2) -- do NOT copy this code!!! ... RETURN VARCHAR2 IS l_valid VARCHAR2(1); l_sql VARCHAR2(32000); CURSOR cur_rules IS SELECT REPLACE(sql_expression ,'#PASSWORD#' ,'''' || in_password || '''' ) AS sql_expression FROM password_rules; BEGIN FOR l_rec IN cur_rules LOOP l_valid := 'N'; -- SQL injection, here we come... l_sql := 'SELECT ''Y'' FROM DUAL ' || l_rec.sql_expression; BEGIN -- why not flood the shared pool with SQLs containing -- user passwords in cleartext? EXECUTE IMMEDIATE l_sql INTO l_valid; EXCEPTION WHEN NO_DATA_FOUND THEN EXIT; END; IF l_valid = 'N' THEN EXIT; END IF; END LOOP; RETURN l_valid; END password_is_valid;
I am pretty sure this code was no longer used, but I couldn’t be sure as I didn’t have access to all the instances that could run it.