Jumat, 22 Juni 2012

Implementasi Session State Protection

Salah satu feature APEX untuk menangkal serangan URL tampering adalah mengaktifkan Session State Protection. User yang mengerti konsep syntax URL APEX sangat mudah untuk melakukan perubahan session state (contoh nilai page item) memakai URL.

Session State Protection bisa diaktifkan melalui Home>>Application Builder>>Application XXX>>Shared Components>>Session State Protection>>Set Application Protection.


Implikasinya kita harus menyediakan sebuah URL dengan sebuah checksum pada link-link yang tidak disediakan melalui standard branching APEX seperti memakai js popup , jquery modal atau Tree link. URL tersebut dimodifikasi memakai APEX API PREPARE_URL Function. berikut contoh penggunaannya.
  1. Tree
  2. select case when connect_by_isleaf = 1 then 0
                when level = 1             then 1
                else                           -1
           end as  status, 
           level,
    a.description as title,            
         '#WORKSPACE_IMAGES#myicon.gif'   as icon, 
           a.ALIAS as value, 
           a.TOOLTIP_MENU as tooltip, 
           case when a.status in ('F','R') then
            APEX_UTIL.PREPARE_URL('f?p=&APP_ID.:'||a.ALIAS||':&SESSION.::NO:CIR:P1_SELECTED_NODE:'||a.ALIAS) 
           else
            APEX_UTIL.PREPARE_URL('f?p=&APP_ID.:1:&SESSION.::NO:CIR:P1_SELECTED_NODE:'||a.ALIAS)
           end as link 
    from TREE_MENU01 a
    start with a.STATUS ='X'
    connect by prior a.ID = a.MENU_ID
    order siblings by a.SEQ
    
  3. Report dengan js popup
  4. select ' Order #' || o.order_id || '' edit, 
    p.product_name, oi.quantity, oi.unit_price, (oi.quantity * oi.unit_price) ext_price, o.user_name, o.order_timestamp
    from demo_orders o, demo_order_items oi, demo_product_info p
    where customer_id = :P7_CUSTOMER_ID
    and o.order_id = oi.order_id
    and oi.product_id = p.product_id
    order by o.order_id, o.order_timestamp, o.user_name
    
Catatan : Kita sebenarnya bisa me non-aktifkan sebagian page dan item yang memakai pop-up atau modal menjadi unrestricted sehingga tidak perlu memakai APEX_UTIL.PREPARE_URL, karena pada dasarnya URL untuk pop-up dan modal tidak bisa di edit bukan? kecuali untuk link tree atau report/button yang memakai javascrip code untuk redirect non pop-up atau modal tetap memakai APEX_UTIL.PREPARE_URL.

Sumber: Oracle® Application Express API Reference Release 4.1