Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как работает wwv_flow_security.check_db_password? / 16 сообщений из 16, страница 1 из 1
23.10.2008, 09:46
    #35610819
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
Кто знает по какому алгоритму реализована функция wwv_flow_security.check_db_password ?

Я знаю только два способа:

1-й способ. Через EXECUTE IMMEDIATE 'alter user ' || p_user_name || ' identified by ' || p_password;
Приблизительно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT u.PASSWORD
     INTO old_pass_hash
     FROM dba_users u
    WHERE u.username = p_user_name;

   EXECUTE IMMEDIATE 'alter user ' || p_user_name || ' identified by ' || p_password;

   SELECT u.PASSWORD
     INTO new_pass_hash
     FROM dba_users u
    WHERE u.username = p_user_name;

   IF old_pass_hash = new_pass_hash
   THEN
      v_ret := FALSE;                                                                         
   ELSE
      v_ret := TRUE;                                                                        
   END IF;

   EXECUTE IMMEDIATE 'alter user ' || p_user_name || ' identified by values ''' || old_pass_hash
                     || '''';
   Return v_RET;

 


2. Через поптытку создания DBLINK.

Но выглядят эти способы не очень красиво. Может есть другой способ которого я не заню?
...
Рейтинг: 0 / 0
23.10.2008, 11:36
    #35611150
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
Судя по всему первым способом.
...
Рейтинг: 0 / 0
23.10.2008, 11:57
    #35611256
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
Ales Protiv Судя по всему первым способом

Ага, в интеренете видел упоминания о проблемах безопасности APEX до 3.0.1 в этой функции. Там же обрывки кода самой функции.

По поводу алгоритма, правильно ли я понимаю, что если я в любом приложении Apex использующим авторизацию DB, введу пользователя SYS, то на непродолжительное время пароль у SYS будет изменен на тот, который я введу?

Боязно как-то.
...
Рейтинг: 0 / 0
23.10.2008, 12:51
    #35611480
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
Ну да, дырка походу.
С другой стороны зная дырку - нет проблем её заткнуть ;)
...
Рейтинг: 0 / 0
23.10.2008, 14:16
    #35611886
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
и как же можно заткнуть?

Я бы не сказал что это дырка. Но реализация проверки пользователь/пароль смущает.
Но судя по всему других путей для проврки в Oracle нет.
...
Рейтинг: 0 / 0
23.10.2008, 14:55
    #35612056
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
Во-первых никто не заставляет использовать именно эту схему аутентификации. Более того, если нету веских причин этого делать, то её не следует использовать.
Во-вторых, если уж используется эта схема, то никто не мешает поставить те же validations на странице логина, или прописать conditions в процессе login, где запретить использование потенциально опасных имен пользователей.
...
Рейтинг: 0 / 0
23.10.2008, 15:20
    #35612189
auriga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
проверка реализована именно так, как указано в первом способе
правда еще проверяется длина имени и пароля < 30 символов
...
Рейтинг: 0 / 0
23.10.2008, 16:39
    #35612556
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
Ales ProtivВо-первых никто не заставляет использовать именно эту схему аутентификации. Более того, если нету веских причин этого делать, то её не следует использовать.


Хотел бы услышать почему? Сейчас на новом проекте как раз и думал использовать авторизацию от Oracle.

Ales ProtivВо-вторых, если уж используется эта схема, то никто не мешает поставить те же validations на странице логина, или прописать conditions в процессе login, где запретить использование потенциально опасных имен пользователей.

За эту подсказку отдельное спасибо.
...
Рейтинг: 0 / 0
23.10.2008, 16:43
    #35612579
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
auriga проверка реализована именно так, как указано в первом способе
правда еще проверяется длина имени и пароля < 30 символов

Это я знал. Вот как выглядит моя реализация:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
 FUNCTION CHECK_DB_PASSWORD (p_user_name VARCHAR2, p_password VARCHAR2)
   RETURN BOOLEAN
IS
   l_stmt          VARCHAR2 ( 4000 );
   old_pass_hash   dba_users.PASSWORD%TYPE;
   new_pass_hash   dba_users.PASSWORD%TYPE;
   v_ret           BOOLEAN;
BEGIN

  IF p_user_name IS NULL OR p_password IS NULL
   THEN
      RETURN FALSE;
   END IF;

   IF    LENGTH (p_password) >  30 
      OR INSTR (p_password, '"') >  0 
      OR INSTR (LOWER (p_password), 'chr(34)') >  0 
   THEN
      RETURN FALSE;
   END IF;

   SELECT u.PASSWORD
     INTO old_pass_hash
     FROM dba_users u
    WHERE u.username = p_user_name;

   EXECUTE IMMEDIATE 'alter user ' || p_user_name || ' identified by ' || p_password;

   SELECT u.PASSWORD
     INTO new_pass_hash
     FROM dba_users u
    WHERE u.username = p_user_name;

   IF old_pass_hash = new_pass_hash
   THEN
      v_ret := FALSE;                                                                         
   ELSE
      v_ret := TRUE;                                                                        
   END IF;

   EXECUTE IMMEDIATE 'alter user ' || p_user_name || ' identified by values ''' || old_pass_hash
                     || '''';
   Return v_RET;                     

EXCEPTION 
  WHEN NO_DATA_FOUND THEN RETURN FALSE; 
END;

Поправте если чего забыл.
...
Рейтинг: 0 / 0
23.10.2008, 16:53
    #35612632
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
uranicAles ProtivВо-первых никто не заставляет использовать именно эту схему аутентификации. Более того, если нету веских причин этого делать, то её не следует использовать.


Хотел бы услышать почему? Сейчас на новом проекте как раз и думал использовать авторизацию от Oracle.


Пользы от неё потому что почти никакой. Только что пароль сама проверяет, да и то видите каким способом.
...
Рейтинг: 0 / 0
23.10.2008, 18:30
    #35612928
auriga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
uranicПоправте если чего забыл.

:)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
  
FUNCTION CHECK_DB_PASSWORD( P_USER_NAME IN VARCHAR2, P_PASSWORD IN VARCHAR2 )
    RETURN BOOLEAN
    IS
      SUCCESS_I PLS_INTEGER := - 1 ;
      P_USER_CT PLS_INTEGER;
      L_STMT VARCHAR2(  255  );
      L_OLD_PASSWORD VARCHAR2(  30  );
      L_NEW_PASSWORD VARCHAR2(  30  );
      L_ACCOUNT_STATUS VARCHAR2(  32  );
      L_EXPIRY_DATE DATE;
      L_USER_NAME VARCHAR2(  256  );
      L_PASSWORD VARCHAR2(  256  );
    BEGIN
      IF P_USER_NAME IS NULL OR P_PASSWORD IS NULL THEN
         RETURN FALSE;
       ELSE
         L_USER_NAME := WWV_FLOW_ASSERT.SIMPLE_SQL_NAME( P_USER_NAME );
         L_PASSWORD := WWV_FLOW_ASSERT.NOOP( P_PASSWORD );
      END IF;
      IF LENGTH( L_PASSWORD ) >  30  OR INSTR( L_PASSWORD, '"' ) >  0  OR INSTR( LOWER( L_PASSWORD ), 'chr(34)' ) >  0  THEN
         RETURN FALSE;
      END IF;
      BEGIN
         SELECT account_status into l_account_status
        from sys.dba_users
       where username = l_user_name
        and account_status NOT LIKE 'LOCKED%';
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
            RETURN FALSE;
      END;
      BEGIN
         SELECT password,expiry_date into l_old_password,l_expiry_date
        from sys.dba_users
       where username = l_user_name;
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
            RETURN FALSE;
      END;
      L_STMT := 'ALTER USER "' || L_USER_NAME || '" IDENTIFIED BY "' || L_PASSWORD || '"';
      EXECUTE IMMEDIATE L_STMT;
      BEGIN
         SELECT password into l_new_password
        from sys.dba_users
       where username = l_user_name;
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
            RETURN FALSE;
      END;
      IF ( L_OLD_PASSWORD != L_NEW_PASSWORD ) THEN
         L_STMT := 'ALTER USER "' || L_USER_NAME || '" IDENTIFIED BY VALUES''' || L_OLD_PASSWORD || '''';
         EXECUTE IMMEDIATE L_STMT;
      END IF;
      IF ( L_ACCOUNT_STATUS LIKE 'EXPIRED%' AND L_EXPIRY_DATE IS NULL ) OR L_EXPIRY_DATE < SYSDATE THEN
         L_STMT := 'ALTER USER "' || L_USER_NAME || '" password expire';
         EXECUTE IMMEDIATE L_STMT;
      END IF;
      RETURN L_OLD_PASSWORD = L_NEW_PASSWORD;
      RETURN FALSE;
   END CHECK_DB_PASSWORD;

...
Рейтинг: 0 / 0
24.10.2008, 08:41
    #35613586
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
auriga ...

Супер!. Если не секрет, откуда код? Разврапил?
...
Рейтинг: 0 / 0
24.10.2008, 19:19
    #35615475
auriga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
да

http://oracle-rewrap.narod.ru/
...
Рейтинг: 0 / 0
19.11.2008, 08:11
    #35662173
uranic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
А как пользоваться этим чудом?
Как не пытался выдает тот же файл что и на входе...
Пробовал пакеты из Oracle 10.2.0.3.
Теперь захотелось посмотреть как устроен пакет wwv_flow_audit.
...
Рейтинг: 0 / 0
19.11.2008, 10:38
    #35662542
auriga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
утилита не понимает длинных имен файлов

там ничего интересного

PROCEDURE AUDIT_ACTION( P_TABLE_NAME IN VARCHAR2, P_ACTION IN VARCHAR2, P_TABLE_PK IN NUMBER )
IS
L_ID NUMBER := NULL;
L_PAGE NUMBER := NULL;
BEGIN
WWV_FLOW_UTILITIES.CHECK_SGID;
IF WWV_FLOW.G_IMPORT_IN_PROGRESS OR G_CASCADE THEN
RETURN;
END IF;
SELECT wwv_seq.nextval into l_id from dual;
IF P_TABLE_NAME IN ( 'WWV_FLOW_STEPS', 'WWV_FLOW_STEP_BUTTONS', 'WWV_FLOW_STEP_BRANCHES', 'WWV_FLOW_STEP_ITEMS', 'WWV_FLOW_STEP_ITEM_HELP', 'WWV_FLOW_STEP_COMPUTATIONS', 'WWV_FLOW_STEP_VALIDATIONS', 'WWV_FLOW_STEP_PROCESSING', 'WWV_FLOW_PAGE_PLUGS' ) THEN
L_PAGE := V( 'FB_FLOW_PAGE_ID' );
ELSE
L_PAGE := NULL;
END IF;
BEGIN
INSERT into wwv_flow_builder_audit_trail (
ID, AUDIT_DATE, AUDIT_ACTION, FLOW_TABLE,
FLOW_TABLE_PK, FLOW_USER, FLOW_ID, PAGE_ID, SCN)
values (
l_id, sysdate, p_action, p_table_name,
p_table_pk, nvl(v('USER'),user),
decode(wwv_flow.g_flow_id,
4750,v('F4750_P2_ID'),
4150,v('F4150_P1_FLOW_ID'),
nvl(v('FB_FLOW_ID'),wwv_flow.g_flow_id)),
l_page,
dbms_flashback.get_system_change_number);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END AUDIT_ACTION;
PROCEDURE REMOVE_AUDIT_TRAIL( P_FLOW_ID IN NUMBER )
IS
BEGIN
WWV_FLOW_UTILITIES.CHECK_SGID;
DELETE from wwv_flow_builder_audit_trail
where flow_id = p_flow_id and security_group_id = wwv_flow_security.g_security_group_id;
END REMOVE_AUDIT_TRAIL;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.09.2013, 21:37
    #38409024
Есть вопрос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает wwv_flow_security.check_db_password?
APEX4.2: sys.wwv_flow_val.verify_user
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как работает wwv_flow_security.check_db_password? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]