Application Express

PreviousNext

Security

Oracle Application Express provides a number of security features to harden application development and runtime security. Administrators can configure both the Application Express instance and related applications to require the HTTPS protocol which utilizes Secure Socket Layer (SSL). They can also define password complexity rules and reuse policies.

Application developers can enable Session State Protection which incorporates checksums within the URL to prevent tampering and unauthorized access. They can also ensure that only necessary data is saved in session state and whenever that information is sensitive (for example, SSN), the value can be encrypted so that it cannot be read outside of the application.

Authentication is used to determine if a user is allowed to access an application. Unless an application is public, where no authentication is required, end users must specify a username and password to gain access. Oracle Application Express provides a number of built-in authentication schemes including:

  • Oracle Application Express Managed Users
  • Single Sign On
  • Database Account Credentials
  • Custom schemes

Custom schemes can also be used that interface with just about any authentication service including Microsoft Active Directory and Oracle Applications.

Authorization schemes are used within Application Express to control the rendering and processing of components based on user privileges. You apply authorization to an entire application, or selectively to pages, or page components such as tabs, regions, buttons, items, validations, processes, and so on. Authorization schemes either succeed or fail. Only if the associated authorization scheme succeeds will a user be able to see or use the component.

Accounts

Workspace administrators can create new Application Express user accounts, manage existing user accounts, and change user passwords. Application Express user accounts can be workspace administrators, workspace developers, or end users. Development privileges are defined using Oracle Application Express user accounts however Oracle Application Express applications can be run using external authentication methods. Oracle Application Express user accounts can be locked and support password expiration and password complexity, as well as other rules.

Session Timeout

Instance Administrators can define maximum session length and maximum idle time for Application Express developers. Similarly, developers can define maximum session length and idle time for each application which moderates access by end-users.

Runtime Only Installation

For testing and production instances, Oracle Application Express supports the ability to install just a runtime version. This minimizes the installed footprint and privileges. It also improves your application consistency because in a runtime instance developers cannot inadvertently update any application source.

Secure Coding

Cross Site Scripting

Cross site-scripting (also referred to as XSS) is a security breach that takes advantage of dynamically generated Web pages. In a XSS attack, a Web application is sent a script that activates when it is read by a user's browser. Once activated, these scripts can steal data, even session credentials, and return the information to the attacker. If malicious code were introduced into an Oracle Application Express application, it could be rendered into HTML regions and other places within the application during normal page rendering. To learn more about potential vulnerabilities and secure coding practices to minimize such risks, see online Help.

SQL Injection

SQL Injection enables input from an application to flow into a SQL statement, effectively altering the SQL statement. A very effective method to ensure SQL statements are protected from SQL injection is to use bind variables. Oracle Application Express supports the use of bind variables in all SQL and PL/SQL statements. To build a secure application all dynamic SQL needs to ensure that no end user input can be injected into the SQL statement.

Protecting Session State

Session State Protection is built-in functionality that prevents hackers from tampering with the URLs within your application. URL tampering can adversely affect program logic, session state contents, and information privacy. Enabling Session State Protection is a two-step process. First, you enable the feature. Second, you set page and item security attributes.

Internal Server Error

500 - Internal Server Error

Request Path passes syntax validation
Mapping request to database pool: PoolMap [_poolName=apex, _regex=null, _workspaceIdentifier=null, _failed=false, _lastUpdate=-1, _template=null, _type=REGEX]
Applied database connection info
Attempting to process with PL/SQL Gateway
==== Processing Request: ====
GET /apex/f?p=4600:42:12205493068236::NO:::
==== Headers in Request ====
accept: */*
user-agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
cookie: ORA_WWV_USER_63113586886954=ORA_WWV-diaBuB8O06JpNbZ4qeEtdnVJ
accept-encoding: gzip, br, zstd, deflate
referer: http://reconquistatramites.gov.ar:9095/apex/f?p=4600%3A42%3A2054942974278%3A%3ANO%3A%3A%3A
host: reconquistatramites.gov.ar:9095
==== Cookies in Request ====
ORA_WWV_USER_63113586886954 =  ORA_WWV-diaBuB8O06JpNbZ4qeEtdnVJ
request parameter: p=4600:42:12205493068236::NO:::
isValidRequest(), procedure name: 
Validating: f
*** Total number of arguments: 15
SID: 684
Parse: 0 ms
-----
begin 
 f(p=>?);
commit;
  end;
*** Total number of arguments: 15
{p=4600:42:12205493068236::NO:::}
p=4600:42:12205493068236::NO:::
p= 4600:42:12205493068236::NO:::
Exec: 49 ms
Got results length: 12987
==== Headers from Results ====
Setting Content-Type (Content-type): text/html; charset=utf-8
Adding X-Frame-Options: DENY
Adding X-DB-Content-length: 12987
Processed PL/SQL Gateway request

WebException [statusCode=500]
	at oracle.dbtools.rt.web.WebException.webException(WebException.java:343)
	at oracle.dbtools.rt.web.WebException.internalError(WebException.java:262)
	at oracle.dbtools.rt.web.WebErrorResponse.internalError(WebErrorResponse.java:101)
	at oracle.dbtools.rt.web.WebErrorResponse.error(WebErrorResponse.java:75)
	at oracle.dbtools.rt.web.HttpEndpointBase.service(HttpEndpointBase.java:132)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
	at java.util.AbstractList$ListItr.set(AbstractList.java:409)
	at java.util.Collections.sort(Collections.java:121)
	at oracle.dbtools.apex.statistics.Statistics.toString(Statistics.java:226)
	at oracle.dbtools.apex.statistics.Statistics.print(Statistics.java:174)
	at oracle.dbtools.apex.statistics.Statistics.finishRequest(Statistics.java:141)
	at oracle.dbtools.apex.ModApexContext.close(ModApexContext.java:324)
	at oracle.dbtools.common.util.Closeables$2.closeType(Closeables.java:155)
	at oracle.dbtools.common.util.Closeables$2.closeType(Closeables.java:149)
	at oracle.dbtools.common.util.Closeables$BaseCloser.close(Closeables.java:239)
	at oracle.dbtools.common.util.Closeables.close(Closeables.java:97)
	at oracle.dbtools.apex.ModApex.close(ModApex.java:176)
	at oracle.dbtools.apex.ModApex.doGet(ModApex.java:101)
	at oracle.dbtools.apex.ModApex.service(ModApex.java:301)
	at oracle.dbtools.rt.web.HttpEndpointBase.modApex(HttpEndpointBase.java:347)
	at oracle.dbtools.rt.web.HttpEndpointBase.service(HttpEndpointBase.java:130)
	... 13 more