Successfully reported this slideshow.
Your SlideShare is downloading. ×

Secure input and output handling - Magento Meetup Vienna Edition

Loading in …3

Check these out next

1 of 41 Ad

More Related Content

Similar to Secure input and output handling - Magento Meetup Vienna Edition (20)

Recently uploaded (20)


Secure input and output handling - Magento Meetup Vienna Edition

  1. 1. Secure input and output handling How not to suck at data validation and output encoding Magento Meetup Vienna Edition
  2. 2. Developer edition
  3. 3. Anna Völkl / @rescueAnn  Hi, I'm Anna.  I'm a Magento Certified Developer. 5 years Magento, Java/PHP since 2004  I love IT & Telecommunication and IT- & Information- Security.   I work at LimeSoda. E-Commerce Agency in Vienna/AT
  4. 4. Once upon a time...
  5. 5. academic titles?! Teamwork also involves being a good teammate, which is why we are very proud シャネル デコ FC Barcelona and was presenting partner of the Fan Zone event prior to the gamehqn Лечебные грязи Сакского озера Trying to find for a approach to raise male power and endurance. New year2013 best now41 Импотенция вы поглядите ! how to write an essay explaining why you deserve a scholarship Sophisticated Men High-heeled shoes A Wise Choice how to write up divorce paper write your name really cool shady lady free download driver samsung hd160jj p
  6. 6. Our daily business
  7. 7. Input  Process  Output
  8. 8. Security-Technology, Department of Defense Computer Security Initiative, 1980
  9. 9. Wep Application Security Risks 1)Injection 2)Broken Authentication and Session Management 3)Cross Site Scripting (XSS)
  10. 10. Stop „Last Minute Security“ ● Do the coding, spend last X hours on „making it secure“ ● Secure coding doesn't really take longer ● Data quality  software quality  security ● Always keep security in mind
  11. 11. Every feature adds a risk.  Every input/output adds a risk.
  12. 12.
  13. 13. Input
  14. 14. Frontend input validation ● User experience ● Stop unwanted input when it occurs ● Do not bother your server with crazy input
  15. 15. Frontend input validation ● User experience ● Stop unwanted input when it occurs ● Do not bother your server with crazy input   
  16. 16. Frontend input validation
  17. 17. Frontend input validation ● User experience ● Stop unwanted input when it occurs ● Do not bother your server with crazy input ● Only store, what you expect Don't fill up your database with garbage.
  18. 18. Magento Frontend Validation Magento 1 (51 validation rules) js/prototype/validation.js Magento 2 (74 validation rules) app/code/Magento/Ui/view/base/web/js/lib/validati on/rules.js
  19. 19. app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js min_text_length max_text_length max-words min-words range-words letters-with-basic-punc alphanumeric letters-only no-whitespace zip-range integer vinUS dateITA dateNL time time12h phoneUS phoneUK mobileUK stripped-min-length email2 url2 credit-card-types ipv4 ipv6 pattern validate-no-html-tags validate-select validate-no-empty validate-alphanum-with-spaces validate-data validate-street validate-phoneStrict validate-phoneLax validate-fax validate-email validate-emailSender validate-password validate-admin-password validate-url validate-clean-url validate-xml-identifier validate-ssn validate-zip-us validate-date-au validate-currency-dollar validate-not-negative-number validate-zero-or-greater validate-greater-than-zero validate-css-length validate-number validate-number-range validate-digits validate-digits-range validate-range validate-alpha validate-code validate-alphanum validate-date validate-identifier validate-zip-international validate-state less-than-equals-to greater-than-equals-to validate-emails validate-cc-number validate-cc-ukss required-entry checked not-negative-amount validate-per-page-value-list validate-new-password validate-item-quantity equalTo
  20. 20. Add your own validator define([ 'jquery', 'jquery/ui', 'jquery/validate', 'mage/translate' ], function ($) { $.validator.addMethod('validate-custom-name', function (value) { return (value !== 'anna'); }, $.mage.__('Enter valid name')); }); M 2
  21. 21. M 2
  22. 22. <form> <div class="field required"> <input type="email" id="email_address" data-validate="{required:true, 'validate- email':true}" aria-required="true"> </div> </form> M 2
  23. 23. Why frontend validation is not enough...
  24. 24. Don't trust the user. Don't trust the input!
  25. 25. Why validate input? User form input Database query results Web Services Server variables Cookies
  26. 26. Validate input rules Magento 1 Mage_Eav_Attribute_Data_Abstract Magento 2 MagentoEavModelAttributeDataAbstractData
  27. 27. MagentoEavModelAttributeDataAbstractData Input Validation Rules – alphanumeric – numeric – alpha – email – url – date M 2
  28. 28. ZendValidator Standard Validation Classes Alnum Validator Alpha Validator Barcode Validator Between Validator Callback Validator CreditCard Validator Date Validator DbRecordExists and DbNoRecordExists Validators Digits Validator EmailAddress Validator File Validation Classes GreaterThan Validator Hex Validator Hostname Validator Iban Validator Identical Validator InArray Validator Ip Validator Isbn Validator IsFloat IsInt LessThan Validator NotEmpty Validator PostCode Validator Regex Validator Sitemap Validators Step Validator StringLength Validator Timezone Validator Uri Validator
  29. 29. Output
  30. 30. Is input validation not enough? ● Cross Site Scripting (XSS) – Protect your users – Protect yourself! ● Store escaped data? – Prepare the data where it's needed!
  31. 31. Use $block->escapeHtml() $block->escapeQuote() $block->escapeUrl() $block->escapeXssInUrl() ...also Magento does it!
  32. 32. Magento 2 Templates XSS security <?php echo $block->getTitleHtml() ?> <?php echo $block->getHtmlTitle() ?> <?php echo $block->escapeHtml($block->getTitle()) ?> <h1><?php echo (int)$block->getId() ?></h1> <?php echo count($var); ?> <?php echo 'some text' ?> <?php echo "some text" ?> <a href="<?php echo $block->escapeXssInUrl( $block->getUrl()) ?>"> <?php echo $block->getAnchorTextHtml() ?> </a> Taken from
  33. 33. Magento 2 Templates XSS security ● Static Test: XssPhtmlTemplateTest.php in devtestsstatictestsuiteMagentoTestPhp ● See dev-guide/templates/template-security.html
  34. 34. magento dev:tests:run static
  35. 35. What happend to the little attribute?
  36. 36. ● Weird customers and customer data was removed ● Frontend validation added • Dropdown (whitelist) would have been an option too ● Server side validation added ● Output escaped
  37. 37. Summary Think, act and design your software responsibly: 1) UTF-8 all the way 2) Client side validation, filter input 3) Server side validation 4) Data storage (database column size,...) 5) Escape output 6) Run tests
  38. 38. </happy>
  39. 39. Thank you! Questions? @rescueAnn