SlideShare une entreprise Scribd logo
1  sur  48
June 29, 2016
Secure Development on the
Salesforce Platform - Part 2
Forward-Looking Statement
Statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize
or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the
forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any
projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding
strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or
technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for
our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate
of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with
completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability
to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our
limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential
factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year
and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are
available on the SEC Filings section of the Investor Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and
may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are
currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
Go Social!
Salesforce Developers
Salesforce Developers
Salesforce Developers
The video will be posted to YouTube & the
webinar recap page (same URL as registration).This webinar is being recorded!
@salesforcedevs / #forcewebinar
▪ Don’t wait until the end to ask your question!
– Technical support will answer questions starting now.
▪ Respect Q&A etiquette
– Please don’t repeat questions. The support team is working
their way down the queue.
▪ Stick around for live Q&A at the end
– Speakers will tackle more questions at the end, time-
allowing.
▪ Head to Developer Forums
– More questions? Visit developer.salesforce.com/forums
Have Questions?
Agenda
1. Overview of our sample app
2. XSS (Cross-Site Scripting)
– Reflected
– Stored
– DOM
3.Open Redirect
4.CSRF (Cross-Site Request Forgery)
FourZip App Part 2
▪ Visualforce page to search Accounts
–Display relevant information such as revenue and description
–Display associated Opportunities
▪ Get zip codes in 12345-1234 format
–External API call will be covered in future webinar sessions
▪ New features!
–New vulnerabilities!
FourZip Part 2
▪ What will we develop today?
– Search via GET
– Display Account description
– “Quick Delete” of Opportunities
– “Quick Edit” of Opportunity name
– Show map via Google Maps
– Let’s take a look at the code!
Cross-Site Scripting
What is Cross Site Scripting?
XSS is a web vulnerability where an attacker can insert
unauthorized JavaScript into a web page viewed by other users
 User input is displayed on the page
 Poor separation between user input (data) and code
 Improper sanitization
1. The resulting page displays the text “You are searching for: cookies”
2. Inspecting the source code, you will see
1. /search?query=cookies<script>badJavascript()</script>
2. You still see “You are searching for: cookies”
3. Source code now shows
User visits www.coolsearch.com/search?query=cookies
XSS example
<h1>You are searching for: cookies</h1>
<h1>You are searching for:
cookies<script>badJavascript<script></h1>
Types of XSS
▪ Reflected - Malicious input is sent to the server and reflected
back to the user in the response
▪ Stored/Persistent - Malicious input is permanently stored on a
server and reflected back to the user
▪ DOM - Malicious input is reflected back to the user without ever
reaching the server. Requires DOM manipulation (javascript)
and is more difficult to find
XSS on the Salesforce Platform
▪ Have built-in auto encoding, provided they…
- don’t occur within a <style> or <script> tag
- don’t occur within an apex tag with escape=”false” attribute
▪ Standard page layout input and outputs are not vulnerable
▪ Provide native encoding functions
▪ Doesn’t mean it’s always safe!
Visualforce Examples
▪ Safe, HTML auto-encoded
▪ Unsafe, escape=”false”
<apex:outputText value="{!$CurrentPage.parameters.Name}" />
<div> {!$CurrentPage.parameters.Name} </div>
<apex:outputText escape=”false”>
{!$CurrentPage.parameters.Name}
</apex:outputText>
Visualforce Examples
▪ Unsafe, script (or style) tags
▪ Unsafe, multiple parsing contexts
<script>
var x = ‘{!$CurrentPage.parameters.Name}’;
</script>
<div onclick=”doSomething(‘{!$CurrentPage.parameters.Name}’)”>
Click Me!
</div>
Reflected XSS demo
escape=”false” attribute in apex outputText
 <apex:outputText escape="false"
value="{!HTMLENCODE(userInput)}" />
 <script> var x = “{!JSENCODE(userInput)}”</script>
 <div onclick=”doThis(‘{!JSINHTMLENCODE(userInput)}’)” />
 <a href=’{!URLENCODE(userInputURL)}’ />
Native Encoding Examples
Use where standard platform encoding does not apply
 Javascript context
 style context
 URL context
 combination of Javascript and HTML
Reflected XSS Fix
Let’s fix the vulnerability and demo the fix
Stored XSS demo
Javascript in Account description
Stored XSS Fix
DOM XSS demo
Javascript update Opportunity
name using innerHTML
DOM XSS Fix
Best Practices for XSS
▪ Never trust user input
▪ Be aware of context!
▪ Use native encoding functions
–HTMLENCODE
–JSENCODE
–JSINHTMLENCODE
–URLENCODE
Open Redirect
What is open redirect?
▪ When an application performs an automatic redirect to a URL
contained within a URL parameter without any validation.
▪ Commonly used in phishing attacks to get unsuspecting users to
malicious websites.
What is open redirect?
▪ If startURL is used after login to automatically send the user
to a start page, the user could end up at evil.org ...
▪ The above example appears obvious, but attackers are often
skilled at obfuscating their intentions:
https://login.salesforce.com/?startURL=http://evil.com
https://login.salesforce.com/?startURL=%68%74%74%70%3a%2f%2
f%65%76%69%6c%2e%6f%72%67
What is the risk?
Imagine the page at evil.org looks
like a login page
In some cases (client-side
redirect), an open redirect can
also be escalated to an XSS with
a javascript:… URL
Open Redirects on the Force.com Platform
▪ Wherever possible, platform protects from open redirects.
▪ Predefined URL parameters are validated to ensure they do not redirect
to an external domain:
– retURL
– saveURL
– cancelURL
▪ Due to the extensibility and flexibility of the Visualforce and Apex
programming languages, it is possible to create open redirects in your
custom code.
Open Redirects on the Force.com Platform
▪ The redirect parameter is passed directly into the pagereference with
setRedirect(true).
▪ When redirect is returned, the Visualforce page will redirect to this URL
with no validation.
▪ This flexibility is sometimes necessary, but it also comes with a
responsibility for secure coding!
PageReference redirect = new
PageReference(ApexPages.currentPage().getParameters().get('url'
)); redirect.setRedirect(true);
return redirect;
Open Redirect demo
Open Redirect Mitigations
1. Do not use URL parameters for redirection. If you can
hardcode the redirect information, there is nothing for an
attacker to leverage.
2. If parameter based redirection is needed, force relative
URLs such as "/home/home.jsp”
– Hardcode the domain in code/setting.
– If redirecting to the same domain be careful about double slash
(//)
• Ex: “//attacker.com” though looks like relative, it will redirect to
attacker.com
Open Redirect Mitigations
3. If relative URLs are too restrictive, a whitelisting approach can
be employed to check the provided redirect parameter against a
list of known good hosts.
– If using a regular expression to fetch the domain, make sure to
check for proper domain format
• Eg: https://salesforce.com@attacker.com/home/home.jsp will redirect
to attacker.com and not Salesforce
Open Redirect Mitigations
4. Map out specific endpoints (Relative or Absolute URL) with
keys. Pass the key instead of URL as a parameter
index URL
1 '/home/home.jsp'
2 'https://www.salesforce.com'
…
c.na1.visual.force.com/apex?retUrl=1
Open Redirect Fix
Let’s fix the vulnerability and demo the fix
CSRF
Cross-Site Request Forgery
A nice browser feature that can be exploited maliciously
▪ You don’t need to re-authenticate to google every time you open a new
tab.
▪ Cookies scoped for a domain are automatically sent along any new
requests to that domain
Cross-site Request Forgery
What is CSRF?
What is CSRF?
Vulnerable Web applications let an attacker force a victim to
make a request with parameters supplied by the attacker
▪ Cookies (including session cookie) will be sent along
▪ Only requests performing Create, Update or Delete actions are
vulnerable
– “Same Origin Policy” protection mechanism in the browser prevents the
attacker to view the result of the malicious request
<img src="https://bank.com/transfertServlet?amnt=10000&from=alice&to=mallory"/>
What is CSRF?
User / Browsersalesforce.com evil.org
login request
visit malicious page
response containing
malicious redirect
CSRF Prevention
▪ State changing web operations should be accompanied by a
secret that isn’t sent automatically like Cookies.
▪ These secrets are called CSRF tokens.
▪ CSRF tokens are typically included in the DOM or in custom
HTTP headers
▪ The tokens should be unique per user per session. The server
should validate the token before each state changing request
Salesforce Platform Protections
▪ All POST requests are protected against CSRF by default on the
platform.
▪ Every time an apex form is loaded, the platform includes a
_CONFIRMATIONTOKEN in the form and the token is validated
on submit.
▪ Make sure no state changing operations are performed on page
load
CSRF demo
CSRF Fix
▪ Do not perform state changing operations on onload of a page
– action function in visualforce page
– Lightning: no state changing operations in client-side controller
doInit() or methods that it calls on the server side
▪ Always perform state changing operation as a form action
– Eg: commandbutton
CSRF Fix
Let’s fix the vulnerability and demo the fix
▪ XSS
– 3 types of Cross-Site Scripting (reflected, stored and DOM)
– always sanitize output when originated from user
– make note of context and use appropriate encoding
▪ Open Redirect
– Perform checks before redirecting the user from a URL parameter
▪ CSRF
- Do not perform state changing operation on load of the page
Developer practices for respecting authorization model
Summary
Additional Resources
Secure Coding Guidelines
https://developer.salesforce.com/page/Secure_Coding_Guideline
Secure Coding - XSS
https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Scripting
Secure Coding - Open Redirect
https://developer.salesforce.com/page/Secure_Coding_Arbitrary_Redirect
Secure Coding - CSRF
https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Request_Forger
y
Salesforce Developer Security Forum
https://developer.salesforce.com/forums
Survey
Your feedback is crucial to the success
of our webinar programs. Thank you!
http://bit.ly/SecureDevelopment2
Q & A
Share Your Feedback: http://bit.ly/SecureDevelopment2
Join the conversation:
@salesforcedevs
@SecureCloudDev
Thank You

Contenu connexe

Tendances

Best Practices with Apex in 2022.pdf
Best Practices with Apex in 2022.pdfBest Practices with Apex in 2022.pdf
Best Practices with Apex in 2022.pdfMohith Shrivastava
 
Performance Testing
Performance TestingPerformance Testing
Performance Testingsharmaparish
 
Oracle SOA Suite Overview - Integration in a Service-Oriented World
Oracle SOA Suite Overview - Integration in a Service-Oriented WorldOracle SOA Suite Overview - Integration in a Service-Oriented World
Oracle SOA Suite Overview - Integration in a Service-Oriented WorldOracleContractors
 
Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...
Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...
Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...Edureka!
 
Event Monitoring: Use Powerful Insights to Improve Performance and Security
Event Monitoring: Use Powerful Insights to Improve Performance and SecurityEvent Monitoring: Use Powerful Insights to Improve Performance and Security
Event Monitoring: Use Powerful Insights to Improve Performance and SecurityDreamforce
 
Insider's Guide to the AppExchange Security Review (Dreamforce 2015)
Insider's Guide to the AppExchange Security Review (Dreamforce 2015)Insider's Guide to the AppExchange Security Review (Dreamforce 2015)
Insider's Guide to the AppExchange Security Review (Dreamforce 2015)Salesforce Partners
 
Client-Side Performance Testing
Client-Side Performance TestingClient-Side Performance Testing
Client-Side Performance TestingAnand Bagmar
 
Generically Call External Classes from Managed Packages
Generically Call External Classes from Managed PackagesGenerically Call External Classes from Managed Packages
Generically Call External Classes from Managed PackagesSalesforce Developers
 
Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Developers
 
Introduction to MuleSoft Anytime Platform
Introduction to MuleSoft Anytime PlatformIntroduction to MuleSoft Anytime Platform
Introduction to MuleSoft Anytime PlatformSalesforce Developers
 
Securing the Elastic Stack for free
Securing the Elastic Stack for freeSecuring the Elastic Stack for free
Securing the Elastic Stack for freeElasticsearch
 
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSalesforce Developers
 
Secure Salesforce: Code Scanning with Checkmarx
Secure Salesforce: Code Scanning with CheckmarxSecure Salesforce: Code Scanning with Checkmarx
Secure Salesforce: Code Scanning with CheckmarxSalesforce Developers
 
Cheat Sheet: Salesforce Einstein for Customer Service
Cheat Sheet: Salesforce Einstein for Customer ServiceCheat Sheet: Salesforce Einstein for Customer Service
Cheat Sheet: Salesforce Einstein for Customer ServiceIvan Harris
 
Introduction to appDynamics
Introduction to appDynamics Introduction to appDynamics
Introduction to appDynamics Siddhanta Rath
 
Salesforce Integration
Salesforce IntegrationSalesforce Integration
Salesforce IntegrationJoshua Hoskins
 
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018Scrum Breakfast Vietnam
 
Release & Change management in salesforce
Release & Change management in salesforceRelease & Change management in salesforce
Release & Change management in salesforceKalyan Lanka ☁
 

Tendances (20)

Best Practices with Apex in 2022.pdf
Best Practices with Apex in 2022.pdfBest Practices with Apex in 2022.pdf
Best Practices with Apex in 2022.pdf
 
Performance Testing
Performance TestingPerformance Testing
Performance Testing
 
Oracle SOA Suite Overview - Integration in a Service-Oriented World
Oracle SOA Suite Overview - Integration in a Service-Oriented WorldOracle SOA Suite Overview - Integration in a Service-Oriented World
Oracle SOA Suite Overview - Integration in a Service-Oriented World
 
Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...
Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...
Splunk Architecture | Splunk Tutorial For Beginners | Splunk Training | Splun...
 
Event Monitoring: Use Powerful Insights to Improve Performance and Security
Event Monitoring: Use Powerful Insights to Improve Performance and SecurityEvent Monitoring: Use Powerful Insights to Improve Performance and Security
Event Monitoring: Use Powerful Insights to Improve Performance and Security
 
Insider's Guide to the AppExchange Security Review (Dreamforce 2015)
Insider's Guide to the AppExchange Security Review (Dreamforce 2015)Insider's Guide to the AppExchange Security Review (Dreamforce 2015)
Insider's Guide to the AppExchange Security Review (Dreamforce 2015)
 
Client-Side Performance Testing
Client-Side Performance TestingClient-Side Performance Testing
Client-Side Performance Testing
 
Generically Call External Classes from Managed Packages
Generically Call External Classes from Managed PackagesGenerically Call External Classes from Managed Packages
Generically Call External Classes from Managed Packages
 
Deep Dive into Apex Triggers
Deep Dive into Apex TriggersDeep Dive into Apex Triggers
Deep Dive into Apex Triggers
 
Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We Do
 
Introduction to MuleSoft Anytime Platform
Introduction to MuleSoft Anytime PlatformIntroduction to MuleSoft Anytime Platform
Introduction to MuleSoft Anytime Platform
 
Securing the Elastic Stack for free
Securing the Elastic Stack for freeSecuring the Elastic Stack for free
Securing the Elastic Stack for free
 
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
 
Secure Salesforce: Code Scanning with Checkmarx
Secure Salesforce: Code Scanning with CheckmarxSecure Salesforce: Code Scanning with Checkmarx
Secure Salesforce: Code Scanning with Checkmarx
 
Cheat Sheet: Salesforce Einstein for Customer Service
Cheat Sheet: Salesforce Einstein for Customer ServiceCheat Sheet: Salesforce Einstein for Customer Service
Cheat Sheet: Salesforce Einstein for Customer Service
 
Chaos Engineering
Chaos EngineeringChaos Engineering
Chaos Engineering
 
Introduction to appDynamics
Introduction to appDynamics Introduction to appDynamics
Introduction to appDynamics
 
Salesforce Integration
Salesforce IntegrationSalesforce Integration
Salesforce Integration
 
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
 
Release & Change management in salesforce
Release & Change management in salesforceRelease & Change management in salesforce
Release & Change management in salesforce
 

Similaire à Secure Development on the Salesforce Platform - Part 2

Building Apps Faster with Lightning and Winter '17
Building Apps Faster with Lightning and Winter '17Building Apps Faster with Lightning and Winter '17
Building Apps Faster with Lightning and Winter '17Mark Adcock
 
Building apps faster with lightning and winter '17
Building apps faster with lightning and winter '17Building apps faster with lightning and winter '17
Building apps faster with lightning and winter '17Salesforce Developers
 
Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)Salesforce Partners
 
Force.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.comForce.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.comSalesforce Developers
 
Mastering Force.com: Advanced Visualforce
Mastering Force.com: Advanced VisualforceMastering Force.com: Advanced Visualforce
Mastering Force.com: Advanced VisualforceSalesforce Developers
 
JavaScript Integration with Visualforce
JavaScript Integration with VisualforceJavaScript Integration with Visualforce
JavaScript Integration with VisualforceSalesforce Developers
 
Force.com Friday : Intro to Visualforce
Force.com Friday : Intro to VisualforceForce.com Friday : Intro to Visualforce
Force.com Friday : Intro to VisualforceSalesforce Developers
 
Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2Salesforce Developers
 
Force.com Friday: Intro to Visualforce (May 8, 2015)
Force.com Friday: Intro to Visualforce (May 8, 2015)Force.com Friday: Intro to Visualforce (May 8, 2015)
Force.com Friday: Intro to Visualforce (May 8, 2015)Salesforce Developers
 
Secure Development on the Salesforce Platform - Part I
Secure Development on the Salesforce Platform - Part ISecure Development on the Salesforce Platform - Part I
Secure Development on the Salesforce Platform - Part ISalesforce Developers
 
Force.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP AppsForce.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP AppsSalesforce Developers
 
Lightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerLightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerCzechDreamin
 
Hands-on Workshop: Intermediate Development with Heroku and Force.com
Hands-on Workshop: Intermediate Development with Heroku and Force.comHands-on Workshop: Intermediate Development with Heroku and Force.com
Hands-on Workshop: Intermediate Development with Heroku and Force.comSalesforce Developers
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce dataSalesforce Developers
 
Developing Offline Mobile Apps with Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps with Salesforce Mobile SDK SmartStoreDeveloping Offline Mobile Apps with Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps with Salesforce Mobile SDK SmartStoreTom Gersic
 
Visualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsVisualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsRitesh Aswaney
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and TestingSalesforce Developers
 

Similaire à Secure Development on the Salesforce Platform - Part 2 (20)

Building Apps Faster with Lightning and Winter '17
Building Apps Faster with Lightning and Winter '17Building Apps Faster with Lightning and Winter '17
Building Apps Faster with Lightning and Winter '17
 
Building apps faster with lightning and winter '17
Building apps faster with lightning and winter '17Building apps faster with lightning and winter '17
Building apps faster with lightning and winter '17
 
Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)
 
Force.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.comForce.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.com
 
Mastering Force.com: Advanced Visualforce
Mastering Force.com: Advanced VisualforceMastering Force.com: Advanced Visualforce
Mastering Force.com: Advanced Visualforce
 
JavaScript Integration with Visualforce
JavaScript Integration with VisualforceJavaScript Integration with Visualforce
JavaScript Integration with Visualforce
 
Force.com Friday : Intro to Visualforce
Force.com Friday : Intro to VisualforceForce.com Friday : Intro to Visualforce
Force.com Friday : Intro to Visualforce
 
Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2
 
Force.com Friday: Intro to Visualforce (May 8, 2015)
Force.com Friday: Intro to Visualforce (May 8, 2015)Force.com Friday: Intro to Visualforce (May 8, 2015)
Force.com Friday: Intro to Visualforce (May 8, 2015)
 
Secure Development on the Salesforce Platform - Part I
Secure Development on the Salesforce Platform - Part ISecure Development on the Salesforce Platform - Part I
Secure Development on the Salesforce Platform - Part I
 
Intro to Apex Programmers
Intro to Apex ProgrammersIntro to Apex Programmers
Intro to Apex Programmers
 
Force.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP AppsForce.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP Apps
 
Lightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerLightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René Winkelmeyer
 
Force.com Friday - Intro to Visualforce
Force.com Friday - Intro to VisualforceForce.com Friday - Intro to Visualforce
Force.com Friday - Intro to Visualforce
 
Hands-on Workshop: Intermediate Development with Heroku and Force.com
Hands-on Workshop: Intermediate Development with Heroku and Force.comHands-on Workshop: Intermediate Development with Heroku and Force.com
Hands-on Workshop: Intermediate Development with Heroku and Force.com
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
 
Developing Offline Mobile Apps with Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps with Salesforce Mobile SDK SmartStoreDeveloping Offline Mobile Apps with Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps with Salesforce Mobile SDK SmartStore
 
Visualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsVisualforce Hack for Junction Objects
Visualforce Hack for Junction Objects
 
Winter 14 Release Developer Preview
Winter 14 Release Developer PreviewWinter 14 Release Developer Preview
Winter 14 Release Developer Preview
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
 

Plus de Salesforce Developers

Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceSalesforce Developers
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base ComponentsSalesforce Developers
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsSalesforce Developers
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaSalesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentSalesforce Developers
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsSalesforce Developers
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsSalesforce Developers
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsSalesforce Developers
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilitySalesforce Developers
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionSalesforce Developers
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPSalesforce Developers
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceSalesforce Developers
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureSalesforce Developers
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DXSalesforce Developers
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectSalesforce Developers
 
Modern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesModern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesSalesforce Developers
 

Plus de Salesforce Developers (20)

Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An Introduction
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
 
Introduction to MuleSoft
Introduction to MuleSoftIntroduction to MuleSoft
Introduction to MuleSoft
 
Modern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesModern App Dev: Modular Development Strategies
Modern App Dev: Modular Development Strategies
 
Dreamforce Developer Recap
Dreamforce Developer RecapDreamforce Developer Recap
Dreamforce Developer Recap
 

Dernier

%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...chiefasafspells
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 

Dernier (20)

%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 

Secure Development on the Salesforce Platform - Part 2

  • 1. June 29, 2016 Secure Development on the Salesforce Platform - Part 2
  • 2. Forward-Looking Statement Statement under the Private Securities Litigation Reform Act of 1995: This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services. The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site. Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
  • 3. Go Social! Salesforce Developers Salesforce Developers Salesforce Developers The video will be posted to YouTube & the webinar recap page (same URL as registration).This webinar is being recorded! @salesforcedevs / #forcewebinar
  • 4. ▪ Don’t wait until the end to ask your question! – Technical support will answer questions starting now. ▪ Respect Q&A etiquette – Please don’t repeat questions. The support team is working their way down the queue. ▪ Stick around for live Q&A at the end – Speakers will tackle more questions at the end, time- allowing. ▪ Head to Developer Forums – More questions? Visit developer.salesforce.com/forums Have Questions?
  • 5. Agenda 1. Overview of our sample app 2. XSS (Cross-Site Scripting) – Reflected – Stored – DOM 3.Open Redirect 4.CSRF (Cross-Site Request Forgery)
  • 6. FourZip App Part 2 ▪ Visualforce page to search Accounts –Display relevant information such as revenue and description –Display associated Opportunities ▪ Get zip codes in 12345-1234 format –External API call will be covered in future webinar sessions ▪ New features! –New vulnerabilities!
  • 7. FourZip Part 2 ▪ What will we develop today? – Search via GET – Display Account description – “Quick Delete” of Opportunities – “Quick Edit” of Opportunity name – Show map via Google Maps – Let’s take a look at the code!
  • 8.
  • 10. What is Cross Site Scripting? XSS is a web vulnerability where an attacker can insert unauthorized JavaScript into a web page viewed by other users  User input is displayed on the page  Poor separation between user input (data) and code  Improper sanitization
  • 11. 1. The resulting page displays the text “You are searching for: cookies” 2. Inspecting the source code, you will see 1. /search?query=cookies<script>badJavascript()</script> 2. You still see “You are searching for: cookies” 3. Source code now shows User visits www.coolsearch.com/search?query=cookies XSS example <h1>You are searching for: cookies</h1> <h1>You are searching for: cookies<script>badJavascript<script></h1>
  • 12. Types of XSS ▪ Reflected - Malicious input is sent to the server and reflected back to the user in the response ▪ Stored/Persistent - Malicious input is permanently stored on a server and reflected back to the user ▪ DOM - Malicious input is reflected back to the user without ever reaching the server. Requires DOM manipulation (javascript) and is more difficult to find
  • 13. XSS on the Salesforce Platform ▪ Have built-in auto encoding, provided they… - don’t occur within a <style> or <script> tag - don’t occur within an apex tag with escape=”false” attribute ▪ Standard page layout input and outputs are not vulnerable ▪ Provide native encoding functions ▪ Doesn’t mean it’s always safe!
  • 14. Visualforce Examples ▪ Safe, HTML auto-encoded ▪ Unsafe, escape=”false” <apex:outputText value="{!$CurrentPage.parameters.Name}" /> <div> {!$CurrentPage.parameters.Name} </div> <apex:outputText escape=”false”> {!$CurrentPage.parameters.Name} </apex:outputText>
  • 15. Visualforce Examples ▪ Unsafe, script (or style) tags ▪ Unsafe, multiple parsing contexts <script> var x = ‘{!$CurrentPage.parameters.Name}’; </script> <div onclick=”doSomething(‘{!$CurrentPage.parameters.Name}’)”> Click Me! </div>
  • 16. Reflected XSS demo escape=”false” attribute in apex outputText
  • 17.  <apex:outputText escape="false" value="{!HTMLENCODE(userInput)}" />  <script> var x = “{!JSENCODE(userInput)}”</script>  <div onclick=”doThis(‘{!JSINHTMLENCODE(userInput)}’)” />  <a href=’{!URLENCODE(userInputURL)}’ /> Native Encoding Examples Use where standard platform encoding does not apply  Javascript context  style context  URL context  combination of Javascript and HTML
  • 18. Reflected XSS Fix Let’s fix the vulnerability and demo the fix
  • 19. Stored XSS demo Javascript in Account description
  • 21. DOM XSS demo Javascript update Opportunity name using innerHTML
  • 23. Best Practices for XSS ▪ Never trust user input ▪ Be aware of context! ▪ Use native encoding functions –HTMLENCODE –JSENCODE –JSINHTMLENCODE –URLENCODE
  • 25. What is open redirect? ▪ When an application performs an automatic redirect to a URL contained within a URL parameter without any validation. ▪ Commonly used in phishing attacks to get unsuspecting users to malicious websites.
  • 26. What is open redirect? ▪ If startURL is used after login to automatically send the user to a start page, the user could end up at evil.org ... ▪ The above example appears obvious, but attackers are often skilled at obfuscating their intentions: https://login.salesforce.com/?startURL=http://evil.com https://login.salesforce.com/?startURL=%68%74%74%70%3a%2f%2 f%65%76%69%6c%2e%6f%72%67
  • 27. What is the risk? Imagine the page at evil.org looks like a login page In some cases (client-side redirect), an open redirect can also be escalated to an XSS with a javascript:… URL
  • 28. Open Redirects on the Force.com Platform ▪ Wherever possible, platform protects from open redirects. ▪ Predefined URL parameters are validated to ensure they do not redirect to an external domain: – retURL – saveURL – cancelURL ▪ Due to the extensibility and flexibility of the Visualforce and Apex programming languages, it is possible to create open redirects in your custom code.
  • 29. Open Redirects on the Force.com Platform ▪ The redirect parameter is passed directly into the pagereference with setRedirect(true). ▪ When redirect is returned, the Visualforce page will redirect to this URL with no validation. ▪ This flexibility is sometimes necessary, but it also comes with a responsibility for secure coding! PageReference redirect = new PageReference(ApexPages.currentPage().getParameters().get('url' )); redirect.setRedirect(true); return redirect;
  • 31. Open Redirect Mitigations 1. Do not use URL parameters for redirection. If you can hardcode the redirect information, there is nothing for an attacker to leverage. 2. If parameter based redirection is needed, force relative URLs such as "/home/home.jsp” – Hardcode the domain in code/setting. – If redirecting to the same domain be careful about double slash (//) • Ex: “//attacker.com” though looks like relative, it will redirect to attacker.com
  • 32. Open Redirect Mitigations 3. If relative URLs are too restrictive, a whitelisting approach can be employed to check the provided redirect parameter against a list of known good hosts. – If using a regular expression to fetch the domain, make sure to check for proper domain format • Eg: https://salesforce.com@attacker.com/home/home.jsp will redirect to attacker.com and not Salesforce
  • 33. Open Redirect Mitigations 4. Map out specific endpoints (Relative or Absolute URL) with keys. Pass the key instead of URL as a parameter index URL 1 '/home/home.jsp' 2 'https://www.salesforce.com' … c.na1.visual.force.com/apex?retUrl=1
  • 34. Open Redirect Fix Let’s fix the vulnerability and demo the fix
  • 36. A nice browser feature that can be exploited maliciously ▪ You don’t need to re-authenticate to google every time you open a new tab. ▪ Cookies scoped for a domain are automatically sent along any new requests to that domain Cross-site Request Forgery What is CSRF?
  • 37. What is CSRF? Vulnerable Web applications let an attacker force a victim to make a request with parameters supplied by the attacker ▪ Cookies (including session cookie) will be sent along ▪ Only requests performing Create, Update or Delete actions are vulnerable – “Same Origin Policy” protection mechanism in the browser prevents the attacker to view the result of the malicious request <img src="https://bank.com/transfertServlet?amnt=10000&from=alice&to=mallory"/>
  • 38. What is CSRF? User / Browsersalesforce.com evil.org login request visit malicious page response containing malicious redirect
  • 39. CSRF Prevention ▪ State changing web operations should be accompanied by a secret that isn’t sent automatically like Cookies. ▪ These secrets are called CSRF tokens. ▪ CSRF tokens are typically included in the DOM or in custom HTTP headers ▪ The tokens should be unique per user per session. The server should validate the token before each state changing request
  • 40. Salesforce Platform Protections ▪ All POST requests are protected against CSRF by default on the platform. ▪ Every time an apex form is loaded, the platform includes a _CONFIRMATIONTOKEN in the form and the token is validated on submit. ▪ Make sure no state changing operations are performed on page load
  • 42. CSRF Fix ▪ Do not perform state changing operations on onload of a page – action function in visualforce page – Lightning: no state changing operations in client-side controller doInit() or methods that it calls on the server side ▪ Always perform state changing operation as a form action – Eg: commandbutton
  • 43. CSRF Fix Let’s fix the vulnerability and demo the fix
  • 44. ▪ XSS – 3 types of Cross-Site Scripting (reflected, stored and DOM) – always sanitize output when originated from user – make note of context and use appropriate encoding ▪ Open Redirect – Perform checks before redirecting the user from a URL parameter ▪ CSRF - Do not perform state changing operation on load of the page Developer practices for respecting authorization model Summary
  • 45. Additional Resources Secure Coding Guidelines https://developer.salesforce.com/page/Secure_Coding_Guideline Secure Coding - XSS https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Scripting Secure Coding - Open Redirect https://developer.salesforce.com/page/Secure_Coding_Arbitrary_Redirect Secure Coding - CSRF https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Request_Forger y Salesforce Developer Security Forum https://developer.salesforce.com/forums
  • 46. Survey Your feedback is crucial to the success of our webinar programs. Thank you! http://bit.ly/SecureDevelopment2
  • 47. Q & A Share Your Feedback: http://bit.ly/SecureDevelopment2 Join the conversation: @salesforcedevs @SecureCloudDev