+ All Categories
Home > Technology > 2012 03 27_philly_jug_rewrite_static

2012 03 27_philly_jug_rewrite_static

Date post: 01-Sep-2014
Category:
Upload: lincoln-iii
View: 662 times
Download: 2 times
Share this document with a friend
Description:
 
Popular Tags:
72
Security and Usability URL-rewriting for the next-generation web user Lincoln Baxter, III Senior Software Engineer Red Hat, Inc. 2012-03-27 Philly Java Users Group Founder http://ocpsoft.org/ “Simpler is better.”
Transcript
Page 1: 2012 03 27_philly_jug_rewrite_static

Security and UsabilityURL-rewriting for the next-generation web user

Lincoln Baxter, IIISenior Software Engineer Red Hat, Inc.2012-03-27

Philly Java Users Group

Founderhttp://ocpsoft.org/ “Simpler is better.”

Page 2: 2012 03 27_philly_jug_rewrite_static

What is URL-rewriting?

Any manipulation of the HTTP Request/Response life-cycle.

Page 3: 2012 03 27_philly_jug_rewrite_static

Mind the gap.

● Gap #1: “Relocated” or missing resources

● Gap #2: Readability & Clutter

● Gap #3: Revealing sensitive information

● Gap #4: Formatting of useful information

● Gap #5: Validation of user input

● … (and actually many more)

Page 4: 2012 03 27_philly_jug_rewrite_static

“Without URL-rewriting, our life would be $#@!'ing hell.”

One big thing.

Page 5: 2012 03 27_philly_jug_rewrite_static

Gap #1: “Relocated” or missing resources

Page 6: 2012 03 27_philly_jug_rewrite_static

404slide not found

Page 10: 2012 03 27_philly_jug_rewrite_static
Page 15: 2012 03 27_philly_jug_rewrite_static

robo.to

Page 16: 2012 03 27_philly_jug_rewrite_static

github.com

Page 17: 2012 03 27_philly_jug_rewrite_static

blippy.com

Page 18: 2012 03 27_philly_jug_rewrite_static

What does it mean?

Page 19: 2012 03 27_philly_jug_rewrite_static

Distraction from failure.

Page 20: 2012 03 27_philly_jug_rewrite_static

1. The content existed and now does not.

2. The content never existed, fool.

Page 21: 2012 03 27_philly_jug_rewrite_static

“Either the website sucks or you suck, and neither is going to make anyone happy.”

Translated.

Page 22: 2012 03 27_philly_jug_rewrite_static

2 ways to have a magical 404 experience ...

Page 23: 2012 03 27_philly_jug_rewrite_static

301 Moved Permanently 302 Moved Temporarily

Page 24: 2012 03 27_philly_jug_rewrite_static

Google says, “Redirect to the new URL for at least 180 days.”

Page 25: 2012 03 27_philly_jug_rewrite_static
Page 26: 2012 03 27_philly_jug_rewrite_static

Gap #2: URL-readability

http://www.amazon.com/Kindle-Touch-Wi-Fi-Ink-Display/dp/B005890G8Y/ref=amb_link_357575542_6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=gateway-center-column&pf_rd_r=1T2J5PYBVZZWBHWN1BP1&pf_rd_t=101&pf_rd_p=1321408942&pf_rd_i=507846

wtf?

Page 27: 2012 03 27_philly_jug_rewrite_static

We are friends.

Page 28: 2012 03 27_philly_jug_rewrite_static

http://amazon.com/shop/kindle-touch

Page 29: 2012 03 27_philly_jug_rewrite_static

Tired of trash in your face?

http://www.amazon.com/Kindle-Touch-Wi-Fi-Ink-Display/dp/B005890G8Y/ref=amb_link_357575542_6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=gateway-center-

column&pf_rd_r=1T2J5PYBVZZWBHWN1BP1&pf_rd_t=101&pf_rd_p=1321408942&pf_rd_i=507846

Page 30: 2012 03 27_philly_jug_rewrite_static

There's plenty of space out in space!

http://amazon.com/shop/kindle-touch?tracker=AAasfds3r32ydkl6fd854kdjf84hfidbdgv64n0curnoxydkl6fd854kdjf84hfidb

dgv64n0ge8nfbh...

Page 31: 2012 03 27_philly_jug_rewrite_static

Gap #3: Revealing sensitive information

Visit: http://microsoft.com/genuine/downloads/faq.aspx

You will be redirected to a page without .aspx suffix

Page 32: 2012 03 27_philly_jug_rewrite_static

.xhtml.do.asp.jsp.php.cgi.jsf/

Page 33: 2012 03 27_philly_jug_rewrite_static

A good magician never reveals the implementation.

Page 34: 2012 03 27_philly_jug_rewrite_static

Gap #4: Formatting of useful information

http://example.com/buy/1/shoes/store

Page 35: 2012 03 27_philly_jug_rewrite_static

35

Be cool.

http://example.com/store/shoes/1http://example.com/store/shoes/1/buy

http://example.com/store?buy=true&category=shoes&item=1

Page 36: 2012 03 27_philly_jug_rewrite_static

Why are people afraid of buying used cars?

Page 37: 2012 03 27_philly_jug_rewrite_static

You never know what you are going to get.

Page 38: 2012 03 27_philly_jug_rewrite_static

Trust me?http://www.youtube.com/watch?v=oHg5SJYRHA0

Page 39: 2012 03 27_philly_jug_rewrite_static

Built trust by reducing clutter & using clean URLs

Before:

http://example.com/news.xhtml?p=my-new-post

After:

http://example.com/news/my-new-post/

Page 40: 2012 03 27_philly_jug_rewrite_static

Gap #5: Validation of user input

URLs are user-input and your website is vulnerable!

Page 41: 2012 03 27_philly_jug_rewrite_static

Aspect Security says:

Two of three recent security vulnerabilities in web-frameworks are URL-based. *

* https://www.aspectsecurity.com/uploads/downloads/2012/03/Aspect-Security-The-Unfortunate-Reality-of-Insecure-Libraries.pdf

Page 44: 2012 03 27_philly_jug_rewrite_static

Real Life...

http://www.llbean.com/webapp/wcs/stores/servlet/CategoryDisplay?categoryId=28&storeId=1&catalogId=1&langId=-1&nav=hp-gndp

Page 45: 2012 03 27_philly_jug_rewrite_static

http://llbean.com/kids

Page 46: 2012 03 27_philly_jug_rewrite_static

http://www.llbean.com/webapp/wcs/stores/servlet/CategoryDisplay?categoryId=28&storeId=1&catalogId=1&langId=-1&nav=hp-gndp

http://www.llbean.com/webapp/wcs/stores/servlet/CategoryDisplay?categoryId=28&storeId=1&catalogId=1&langId=-1&nav=hp-gndp

Vulnerable!

Cluttered!

wtf?

validate?

Page 47: 2012 03 27_philly_jug_rewrite_static

Mind the gap.

● Gap #1: “Relocated” resources (404)

● Gap #2: Readability & Clutter

● Gap #3: Revealing sensitive information

● Gap #4: Formatting of useful information

● Gap #5: Validation of user input

Page 48: 2012 03 27_philly_jug_rewrite_static

URL-rewriting

Page 49: 2012 03 27_philly_jug_rewrite_static

Basic things we can do with all types of URL-rewriting

● Redirection & Relocation

● Parameterization

● Simple URL validation

● Add/Remove Headers

/store/{category}/{item}/store/$attack-%3/beginAccept-Charset: UTF-8

Page 50: 2012 03 27_philly_jug_rewrite_static

URL-rewriting: Proxy based (Non-Java)

Page 51: 2012 03 27_philly_jug_rewrite_static

Inbound only.

Page 52: 2012 03 27_philly_jug_rewrite_static

URL-rewriting: Filter Based (Native Java)

Page 53: 2012 03 27_philly_jug_rewrite_static

blatant lie

“I have no personal investment in any of these tools.”

- Me

Page 54: 2012 03 27_philly_jug_rewrite_static

Cool things we can do with Filter-based Java URL-rewriting

● Transformation and Canonicalization

● Complex Validation

● Data Conversion

● Request interception

● And more...

example.com/project/FOO

example.com/project/foo.when(Path.matches("/store/product/{pid}").where("pid").bindsTo(El.property("productBean.product").convertedBy(ProductConverter.class).validatedBy(ProductValidator.class)))

Page 55: 2012 03 27_philly_jug_rewrite_static

Some things you should NOT do, with Java URL-rewriting

If it needs to run when your app doesn't... you probably don't want to put it in your app.

Page 56: 2012 03 27_philly_jug_rewrite_static

Demos(It's *barcode time)

Page 57: 2012 03 27_philly_jug_rewrite_static

Access Control / Timer Demo ( http://access-rewrite.rhcloud.com/ )

● Problem #1: “Relocated” resources (404)

● Problem #2: Readability & Clutter

● Problem #3: Revealing sensitive information

● Problem #4: Formatting useful information

● Problem #5: Validation of user input

Page 58: 2012 03 27_philly_jug_rewrite_static

Rest Validation/Conversion Demo ( http://rest-rewrite.rhcloud.com )

● Problem #1: “Relocated” resources (404)

● Problem #2: Readability & Clutter

● Problem #3: Revealing sensitive information

● Problem #4: Formatting useful information

● Problem #5: Validation of user input

Page 59: 2012 03 27_philly_jug_rewrite_static

Composite Query Demo ( http://composite-rewrite.rhcloud.com )

● Problem #1: “Relocated” resources (404)

● Problem #2: Readability & Clutter

● Problem #3: Revealing sensitive information

● Problem #4: Formatting useful information

● Problem #5: Validation of user input

Page 60: 2012 03 27_philly_jug_rewrite_static

Bonus round!

But client-side web applications are the future,can't I just ignore the URL and use WebSockets?!

Page 61: 2012 03 27_philly_jug_rewrite_static

Client side browser applications

serves

http://twitter.com/#!/lincolnthree

requests#!/lincolnthree

#!/connect

#!/discover

#!/lincolnthree/status/180710662975143936

#!/li

Page 62: 2012 03 27_philly_jug_rewrite_static

How can we clean it up?

http://example.com/

request

response

example.com/login

example.com/signup

example.com/lincoln/myprojectrequest

?response

Page 63: 2012 03 27_philly_jug_rewrite_static

Handling bookmarks

serves

example.com/

example.com/login

example.com/lincoln/myproject

requ

est

/inspects

loginlincoln/...profile

Page 64: 2012 03 27_philly_jug_rewrite_static

Where am I?

example.com/

example.com/lincoln

example.com/lincoln/myproject

example.com/lincoln/lincoln

How do you determine the Context Root?

example.com/ ?example.com/lincoln ?example.com/lincoln/lincoln ?

Page 65: 2012 03 27_philly_jug_rewrite_static

Resolve the Context Root

http://example.com/lincoln

request

response

HEAD /lincoln?org.ocpsoft.rewrite.history.ContextPath

request

200 OK - Set Header: ContextPath = /response

/+

Page 67: 2012 03 27_philly_jug_rewrite_static

Demos

● Access control (Request Interception)

● REST (Validation and Conversion)

● Composite Query (Security and Usability)

● SocialPM Rich Client (Browser Applications)

Page 68: 2012 03 27_philly_jug_rewrite_static

Mind the gap.

● Gap #1: “Relocated” resources (404)

● Gap #2: Readability & Clutter

● Gap #3: Revealing sensitive information

● Gap #4: Formatting useful information

● Gap #5: Validation of URLs

● … (and actually many more)

Page 69: 2012 03 27_philly_jug_rewrite_static

“Without URL-rewriting, our life would be $#@!'ing hell.”

One big thing.

Page 70: 2012 03 27_philly_jug_rewrite_static

/questions

Page 72: 2012 03 27_philly_jug_rewrite_static

You have options, but if you liked what you saw...

● Try it now: ocpsoft.org/rewrite

● Get involved: github.com/ocpsoft/rewrite


Recommended