SlideShare a Scribd company logo
The OWASP Foundation
http://www.owasp.org
Escape ’Attacks!’
India, Kerala
2015
Rajesh P
Board Member, OWASP Kerala
Copyright © The OWASP Foundation
Permission is granted to copy, distribute and/or modify the document under the terms of the OWASP License
All trademarks, service marks, trade names, product names and logos appearing on the slides are the property of their respective owners
Secure Coding
Practice Series
Parse what you code
The OWASP Foundation
http://www.owasp.org
2
The OWASP Foundation
http://www.owasp.org
• Developer approaches application
based on what it is intended to do
• Attacker’s approach is based on
what application can be made to do
• Any action not specifically denied is
considered allowed
3
Fundamental
difference
The OWASP Foundation
http://www.owasp.org
• Minimize Attack Surface Area
• Secure Defaults
• Principle of Least Privilege
• Principle of Defense in Depth
• Fail Securely
• External Systems are Insecure
• Separation of Duties
• Do not trust Security through Obscurity
• Simplicity
• Fix Security Issues Correctly
4
Security
Principles
The OWASP Foundation
http://www.owasp.org
• Price related hidden fields, CSS visibility –
perform server side validation
• Cross Site Request Forgery (CSRF)
• Sensitive Information Disclosure via Client-
Side Storage and Comments
• Hardcoded domain in HTML
• HTML5: Form validation turned off
• Password Submission using GET method
5
HTML
The OWASP Foundation
http://www.owasp.org
• Selects, radio buttons, and checkboxes
Wrong Approach
<input type="radio" name="acctNo"
value="455712341234">Gold Card
<input type="radio" name="acctNo"
value="455712341235">Platinum Card
String acctNo = getParameter('acctNo');
String sql = "SELECT acctBal FROM accounts
WHERE acctNo = '?'"; 6
HTML
The OWASP Foundation
http://www.owasp.org
Right Approach
<input type="radio" name="acctIndex"
value="1" />Gold Credit Card
<input type="radio" name="acctIndex"
value="2" />Platinum Credit Card
String acctNo =
acct.getCardNumber(getParameter('acctIndex'))
String sql = "SELECT acctBal FROM accounts
WHERE acct_id = '?' AND acctNo ='?'";
7
HTML
The OWASP Foundation
http://www.owasp.org
• Display of passwords in form, Autocomplete
• Don’t populate password in form
<input name="password"
type="password" value="<%=pass%>" />
8
HTML
The OWASP Foundation
http://www.owasp.org
• Ajax Hijacking
• Cross Site Scripting: DOM, Poor validation
• Dynamic code evaluation: Code, Script
Injection, Unsafe XMLHTTPRequest – eval
• Open Redirect
• Path Manipulation – dot dot slash attack
• Obfuscate Client Side JavaScript. Remember
the jQuery.min, jQuery.dev versions
9
JavaScript
The OWASP Foundation
http://www.owasp.org
• jQuery
Unsafe usage
var txtAlertMsg = "Hello World: ";
var txtUserInput =
"test<script>alert(1)</script>";
$("#message").html( txtAlertMsg +"" +
txtUserInput + "");
Safe usage (use text, not html)
$("#userInput").text(
"test<script>alert(1)</script>"); <-- treat
user input as text 10
JavaScript
The OWASP Foundation
http://www.owasp.org
• Use of =, != for null comparison
• Ignoring exception – try & catch
• Persistent Cross Site Scripting
• Use parameterized statements, validate
input before string concatenation in dynamic
SQL’s in stored procedures
• Avoid xp_cmdshell
• Never store passwords in plaintext
11
SQL
The OWASP Foundation
http://www.owasp.org
• Use stored procedures to abstract
data access and allow for the
removal of permissions to the base
tables in the database
12
SQL
The OWASP Foundation
http://www.owasp.org
• The Java libraries (java.lang, java.util etc, often
referred to as the Java API) are themselves written
in Java, although methods marked as native. The
Sun JVM is written in C, JVM running on your
machine is a platform-dependent executable and
hence could have been originally written in any
language. The Oracle JVM (HotSpot) is written in
the C++ programming language. Java Compiler
provided By Oracle is written in JAVA itself. Many
Java vulnerabilities are really C vulnerabilities that
occur in an implementation of Java.
13
About Java
The OWASP Foundation
http://www.owasp.org
• Secure data types – char[], GuardedString
• Zip Bombs
private static final int LINE_LIMIT = 1000000;
int totalLinesRead = 0;
while ((s = reader.readLine()) != null) {
doSomethingWithLine(s);
totalLinesRead++;
if (totalLinesRead > LINE_LIMIT) {
throw new Exception("File being read is too big.");
}
}
14
Java
The OWASP Foundation
http://www.owasp.org
• Do not ignore values returned by methods.
private void deleteFile()
{
File tempFile = new File(tempFileName);
if (tempFile.exists()) {
if (!tempFile.delete()) {
// handle failure to delete the
file
}
}
}
15
Java
The OWASP Foundation
http://www.owasp.org
• Release resources in all cases. The try-with-
resource syntax introduced in Java SE 7
automatically handles the release of many
resource types.
try (final InputStream in =
Files.newInputStream(path)) {
handler.handle(new
BufferedInputStream(in));
}
16
Java - DOS
The OWASP Foundation
http://www.owasp.org
• Billion laughs attack - XML entity expansion
causes an XML document to grow
dramatically during parsing.
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSI
NG, true);
DocumentBuilder parser = dbf.newDocumentBuilder();
parser.parse(xmlfile);
17
Java
The OWASP Foundation
http://www.owasp.org
• Add security wrapper around native method
calls – use JNI defensively
• Make public static fields final
• java.lang.SecurityManager – policy
• In Struts deny direct jsp access explicitly
• Use SecureRandom for PRNG, 128 bit length
SecureRandom random = new
SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);
18
Java
The OWASP Foundation
http://www.owasp.org
• JSP Source code disclosure
• Non-Final classes let an attacker extend a
class in a malicious manner
• Packages are by default open, not sealed,
which means a rogue class can be added to
your package
• Check uploaded file header than just
extension alone
https://www.owasp.org/images/0/08/OWASP_S
CP_Quick_Reference_Guide_v2.pdf
19
Java
The OWASP Foundation
http://www.owasp.org
• Override the clone method to make classes
unclonable unless required. Cloning allows
an attacker to instantiate a class without
running any of the class constructors.
20
Java Cloning
The OWASP Foundation
http://www.owasp.org
• Define the following method in each of your
classes:
public final Object clone() throws
java.lang.CloneNotSupportedException {
throw new
java.lang.CloneNotSupportedException();
}
21
Java Cloning
The OWASP Foundation
http://www.owasp.org
• If a clone is required, one can make one’s
clone method immune to overriding by using
the final keyword:
public final Object clone() throws
java.lang.CloneNotSupportedException {
return super.clone();
}
22
Java Cloning
The OWASP Foundation
http://www.owasp.org
• Unfavour serialization of objects containing
sensitive information – transient fields
private final void
writeObject(ObjectOutputStream out)
throws java.io.IOException {
throw new java.io.IOException("Object cannot
be serialized");
}
23
Java Serialization
The OWASP Foundation
http://www.owasp.org
• Prevent deserialization of objects containing
sensitive information
private final void
readObject(ObjectInputStream in)
throws java.io.IOException {
throw new java.io.IOException("Class cannot
be deserialized");
}
24
Java Deserialization
The OWASP Foundation
http://www.owasp.org
• deny access by default
isAdmin = false;
try {
codeWhichMayFail();
isAdmin = isUserInRole(“Administrator”);
}
catch (Exception ex) {
log.write(ex.toString());
}
25
Java
The OWASP Foundation
http://www.owasp.org
26
Return after
sendRedirect
The OWASP Foundation
http://www.owasp.org
• Response splitting allows an attacker to take
control of the response body by adding extra
CRLFs into headers
String author = request.getParameter(AUTHOR_PARAM);
...
Cookie cookie = new Cookie("author", author);
cookie.setMaxAge(cookieExpiration);
response.addCookie(cookie);
27
Response Splitting
The OWASP Foundation
http://www.owasp.org
If an attacker submits a malicious string, such as “Rajesh
PrnHTTP/1.1 200 OKrn...", then the HTTP response would
be split into two responses of the following form:
HTTP/1.1 200 OK
...
Set-Cookie: author=Rajesh P
HTTP/1.1 200 OK
...
Clearly, the second response is completely controlled by the
attacker and can be constructed with any header and body
content desired.
Response Splitting
The OWASP Foundation
http://www.owasp.org
Attacker Proxy
Web
Server
302
302
200
(Gotcha!)
1st attacker request
(response splitter)
1st attacker request
(response splitter)
request
/account?id=victim
200
(Gotcha!)
200
(Victim’s account data)
Victim
request
/index.html
request
/index.html
200
(Victim’s account data)
Response Splitting
The OWASP Foundation
http://www.owasp.org
• How to Identify new vulnerability disclosures
in Java? – NVD, CVE
• Always remove older versions of Java on
devices while updating to the new secure
version
30
Miscellaneous
The OWASP Foundation
http://www.owasp.org
The OWASP Enterprise
Security API
Custom Enterprise Web Application
Enterprise Security API
Authenticator
User
AccessController
AccessReferenceMap
Validator
Encoder
HTTPUtilities
Encryptor
EncryptedProperties
Randomizer
ExceptionHandling
Logger
IntrusionDetector
SecurityConfiguration
Existing Enterprise Security Services/Libraries
31
The OWASP Foundation
http://www.owasp.org
Validate:
getValidDate()
getValidCreditCard()
getValidInput()
getValidNumber()
…
Validating Untrusted
Input / Output
BackendController Business
Functions
User Data Layer
Presentation
Layer
Validate:
getValidDate()
getValidCreditCard()
getValidSafeHTML()
getValidInput()
getValidNumber()
getValidFileName()
getValidRedirect()
safeReadLine()
…
Validation
Engine
Validation
Engine
The OWASP Foundation
http://www.owasp.org
OWASP Top Ten
Coverage
33
OWASP Top Ten
A1. Cross Site Scripting (XSS)
A2. Injection Flaws
A3. Malicious File Execution
A4. Insecure Direct Object Reference
A5. Cross Site Request Forgery (CSRF)
A6. Leakage and Improper Error Handling
A7. Broken Authentication and Sessions
A8. Insecure Cryptographic Storage
A9. Insecure Communications
A10. Failure to Restrict URL Access
OWASP ESAPI
Validator, Encoder
Encoder
HTTPUtilities (upload)
AccessReferenceMap
User (csrftoken)
EnterpriseSecurityException, HTTPUtils
Authenticator, User, HTTPUtils
Encryptor
HTTPUtilities (secure cookie, channel)
AccessController
The OWASP Foundation
http://www.owasp.org
• Disgruntled staff
• Unintentional program execution
• Identify Training need, Certification
• Urgent and Frequent patches
• Selection of Third Party Libraries
• “Drive by” attacks, such as side
effects or direct consequences of a
virus, worm or Trojan attack
34
Why Static
Code Analysis
The OWASP Foundation
http://www.owasp.org
• Categories of Vulnerability Sources
• URL, Parameter Tampering
• Header Manipulation
• Cookie Poisoning
• Categories of Vulnerability Sinks
• SQL, XPath, XML, LDAP Injection
• Cross-site Scripting
• HTTP Response Splitting
• Command Injection
• Path Traversal
35
LAPSE+
Static Code Analysis
The OWASP Foundation
http://www.owasp.org
36
Free Static Analysis
Tools
The OWASP Foundation
http://www.owasp.org
Thank you!
Until next time, stay secure!
rajesh.nair@owasp.or
g
https://www.facebook.com/OWASPKerala
https://www.twitter.com/owasp_kerala

More Related Content

What's hot (20)

PPTX
Unit tests & TDD
Dror Helper
 
PPTX
Selenium Tutorial Java
Ahmed HARRAK
 
PDF
JavaScript - Chapter 15 - Debugging Techniques
WebStackAcademy
 
PPSX
OOP with Java - Continued
Hitesh-Java
 
PPTX
Online Job Portal Presentation
Saad Abbasi
 
PPTX
C# Arrays
Hock Leng PUAH
 
PPTX
Introduction to Node js
Akshay Mathur
 
PPTX
College management system ppt
Shanthan Reddy
 
PPTX
Java project-presentation
APSMIND TECHNOLOGY PVT LTD.
 
PPTX
Introduction to asp.net
shan km
 
PPTX
Observer Software Design Pattern
Nirthika Rajendran
 
PPT
Example of dfd with answer
Mahmoud Bakeer
 
PDF
What is JUnit? | Edureka
Edureka!
 
PPT
React native
Mohammed El Rafie Tarabay
 
PPTX
College Management System
Swapna Subhadarsini
 
PDF
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
PPTX
Introduction to node.js
Dinesh U
 
PDF
java servlet and servlet programming
Kumar
 
PPT
Тестування ПЗ
Kyrylo Bezpalyi
 
PDF
UML- Class Diagrams, State Machine Diagrams
QBI Institute
 
Unit tests & TDD
Dror Helper
 
Selenium Tutorial Java
Ahmed HARRAK
 
JavaScript - Chapter 15 - Debugging Techniques
WebStackAcademy
 
OOP with Java - Continued
Hitesh-Java
 
Online Job Portal Presentation
Saad Abbasi
 
C# Arrays
Hock Leng PUAH
 
Introduction to Node js
Akshay Mathur
 
College management system ppt
Shanthan Reddy
 
Java project-presentation
APSMIND TECHNOLOGY PVT LTD.
 
Introduction to asp.net
shan km
 
Observer Software Design Pattern
Nirthika Rajendran
 
Example of dfd with answer
Mahmoud Bakeer
 
What is JUnit? | Edureka
Edureka!
 
College Management System
Swapna Subhadarsini
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Introduction to node.js
Dinesh U
 
java servlet and servlet programming
Kumar
 
Тестування ПЗ
Kyrylo Bezpalyi
 
UML- Class Diagrams, State Machine Diagrams
QBI Institute
 

Viewers also liked (13)

PPTX
EC-Council Secure Programmer Java
BOOSTurSKILLS
 
PDF
JBoss Negotiation in AS7
Josef Cacek
 
PPTX
Jar signing
LearningTech
 
PDF
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Christian Schneider
 
PDF
Java Security Manager Reloaded - jOpenSpace Lightning Talk
Josef Cacek
 
PPTX
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Martin Toshev
 
PPT
Java security
Ankush Kumar
 
PPTX
Security Architecture of the Java platform
Martin Toshev
 
ODP
OWASP Secure Coding
bilcorry
 
PDF
CIS14: Best Practices You Must Apply to Secure Your APIs
CloudIDSummit
 
PPTX
Secure coding practices
Scott Hurrey
 
PPTX
Deep dive into Java security architecture
Prabath Siriwardena
 
PDF
Javantura v4 - Security architecture of the Java platform - Martin Toshev
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
EC-Council Secure Programmer Java
BOOSTurSKILLS
 
JBoss Negotiation in AS7
Josef Cacek
 
Jar signing
LearningTech
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Christian Schneider
 
Java Security Manager Reloaded - jOpenSpace Lightning Talk
Josef Cacek
 
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Martin Toshev
 
Java security
Ankush Kumar
 
Security Architecture of the Java platform
Martin Toshev
 
OWASP Secure Coding
bilcorry
 
CIS14: Best Practices You Must Apply to Secure Your APIs
CloudIDSummit
 
Secure coding practices
Scott Hurrey
 
Deep dive into Java security architecture
Prabath Siriwardena
 
Javantura v4 - Security architecture of the Java platform - Martin Toshev
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Ad

Similar to Java Secure Coding Practices (20)

PPTX
Application Security Vulnerabilities: OWASP Top 10 -2007
Vaibhav Gupta
 
PDF
Web Application Security 101
Cybersecurity Education and Research Centre
 
PDF
Xebia Knowledge Exchange - Owasp Top Ten
Publicis Sapient Engineering
 
PDF
OWASP Top 10 2007 for JavaEE
Magno Logan
 
PDF
Secure code
ddeogun
 
PPTX
OWASP -Top 5 Jagjit
Jagjit Singh Brar
 
PPTX
Top Ten Java Defense for Web Applications v2
Jim Manico
 
PPTX
OWASP_Top_Ten_Proactive_Controls_v32.pptx
nmk42194
 
PDF
OWASP Top 10 (2010 release candidate 1)
Jeremiah Grossman
 
PPTX
OWASP_Top_Ten_Proactive_Controls_v2.pptx
cgt38842
 
PPTX
OWASP_Top_Ten_Proactive_Controls_v2.pptx
johnpragasam1
 
PPTX
OWASP_Top_Ten_Proactive_Controls version 2
ssuser18349f1
 
PPTX
OWASP_Top_Ten_Proactive_Controls_v2.pptx
azida3
 
PDF
Security Awareness
Lucas Hendrich
 
PPTX
OWASP top 10-2013
tmd800
 
PPT
OWASP_Top_10_Introduction_and_Remedies_2017.ppt
jangomanso
 
PPTX
OWASP Top Ten 2017
Michael Furman
 
PDF
OWASP Top 10 List Overview for Web Developers
Benjamin Floyd
 
PPT
OWASP Top10 2010
Tommy Tracx Xaypanya
 
Application Security Vulnerabilities: OWASP Top 10 -2007
Vaibhav Gupta
 
Web Application Security 101
Cybersecurity Education and Research Centre
 
Xebia Knowledge Exchange - Owasp Top Ten
Publicis Sapient Engineering
 
OWASP Top 10 2007 for JavaEE
Magno Logan
 
Secure code
ddeogun
 
OWASP -Top 5 Jagjit
Jagjit Singh Brar
 
Top Ten Java Defense for Web Applications v2
Jim Manico
 
OWASP_Top_Ten_Proactive_Controls_v32.pptx
nmk42194
 
OWASP Top 10 (2010 release candidate 1)
Jeremiah Grossman
 
OWASP_Top_Ten_Proactive_Controls_v2.pptx
cgt38842
 
OWASP_Top_Ten_Proactive_Controls_v2.pptx
johnpragasam1
 
OWASP_Top_Ten_Proactive_Controls version 2
ssuser18349f1
 
OWASP_Top_Ten_Proactive_Controls_v2.pptx
azida3
 
Security Awareness
Lucas Hendrich
 
OWASP top 10-2013
tmd800
 
OWASP_Top_10_Introduction_and_Remedies_2017.ppt
jangomanso
 
OWASP Top Ten 2017
Michael Furman
 
OWASP Top 10 List Overview for Web Developers
Benjamin Floyd
 
OWASP Top10 2010
Tommy Tracx Xaypanya
 
Ad

Recently uploaded (20)

PPT
FINAL plumbing code for board exam passer
MattKristopherDiaz
 
PPTX
Stability of IBR Dominated Grids - IEEE PEDG 2025 - short.pptx
ssuser307730
 
PDF
13th International Conference of Security, Privacy and Trust Management (SPTM...
ijcisjournal
 
PDF
FSE-Journal-First-Automated code editing with search-generate-modify.pdf
cl144
 
PPTX
FSE_LLM4SE1_A Tool for In-depth Analysis of Code Execution Reasoning of Large...
cl144
 
PDF
Rapid Prototyping for XR: Lecture 1 Introduction to Prototyping
Mark Billinghurst
 
PPTX
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pptx
AsadShad4
 
PDF
輪読会資料_Miipher and Miipher2 .
NABLAS株式会社
 
PPTX
CST413 KTU S7 CSE Machine Learning Clustering K Means Hierarchical Agglomerat...
resming1
 
PDF
Rapid Prototyping for XR: Lecture 3 - Video and Paper Prototyping
Mark Billinghurst
 
PPTX
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pptx
AsadShad4
 
PDF
Designing for Tomorrow – Architecture’s Role in the Sustainability Movement
BIM Services
 
PDF
NFPA 10 - Estandar para extintores de incendios portatiles (ed.22 ENG).pdf
Oscar Orozco
 
PDF
01-introduction to the ProcessDesign.pdf
StiveBrack
 
PDF
Plant Control_EST_85520-01_en_AllChanges_20220127.pdf
DarshanaChathuranga4
 
PDF
June 2025 Top 10 Sites -Electrical and Electronics Engineering: An Internatio...
elelijjournal653
 
PPTX
MATERIAL SCIENCE LECTURE NOTES FOR DIPLOMA STUDENTS
SAMEER VISHWAKARMA
 
PPTX
Comparison of Flexible and Rigid Pavements in Bangladesh
Arifur Rahman
 
PDF
تقرير عن التحليل الديناميكي لتدفق الهواء حول جناح.pdf
محمد قصص فتوتة
 
PPTX
WHO And BIS std- for water quality .pptx
dhanashree78
 
FINAL plumbing code for board exam passer
MattKristopherDiaz
 
Stability of IBR Dominated Grids - IEEE PEDG 2025 - short.pptx
ssuser307730
 
13th International Conference of Security, Privacy and Trust Management (SPTM...
ijcisjournal
 
FSE-Journal-First-Automated code editing with search-generate-modify.pdf
cl144
 
FSE_LLM4SE1_A Tool for In-depth Analysis of Code Execution Reasoning of Large...
cl144
 
Rapid Prototyping for XR: Lecture 1 Introduction to Prototyping
Mark Billinghurst
 
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pptx
AsadShad4
 
輪読会資料_Miipher and Miipher2 .
NABLAS株式会社
 
CST413 KTU S7 CSE Machine Learning Clustering K Means Hierarchical Agglomerat...
resming1
 
Rapid Prototyping for XR: Lecture 3 - Video and Paper Prototyping
Mark Billinghurst
 
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pptx
AsadShad4
 
Designing for Tomorrow – Architecture’s Role in the Sustainability Movement
BIM Services
 
NFPA 10 - Estandar para extintores de incendios portatiles (ed.22 ENG).pdf
Oscar Orozco
 
01-introduction to the ProcessDesign.pdf
StiveBrack
 
Plant Control_EST_85520-01_en_AllChanges_20220127.pdf
DarshanaChathuranga4
 
June 2025 Top 10 Sites -Electrical and Electronics Engineering: An Internatio...
elelijjournal653
 
MATERIAL SCIENCE LECTURE NOTES FOR DIPLOMA STUDENTS
SAMEER VISHWAKARMA
 
Comparison of Flexible and Rigid Pavements in Bangladesh
Arifur Rahman
 
تقرير عن التحليل الديناميكي لتدفق الهواء حول جناح.pdf
محمد قصص فتوتة
 
WHO And BIS std- for water quality .pptx
dhanashree78
 

Java Secure Coding Practices