Secure input and
output handling
How not to suck at data validation and
output encoding
Magento Meetup
Vienna Edition
Developer edition
http://de.slideshare.net/avoelkl/secure-input-and-output-handling-57946042
Anna Völkl / @rescueAnn
 Hi, I'm Anna. http://anna.voelkl.at
 I'm a Magento Certified Developer.
5 years Magento, Java/P...
Once upon a time...
academic titles?!
Teamwork also involves being a good teammate, which is why we are very proud
シャネル デコ
FC Barcelona and wa...
Our daily business
Input

Process

Output
Security-Technology, Department of Defense Computer
Security Initiative, 1980
Wep Application Security Risks
1)Injection
2)Broken Authentication and Session
Management
3)Cross Site Scripting (XSS)
htt...
Stop „Last Minute Security“
●
Do the coding, spend last X hours on „making it
secure“
●
Secure coding doesn't really take ...
Every feature adds a risk.

Every input/output adds a risk.
http://blogs.technet.com/b/rhalbheer/archive/2011/01/14/real-physical-security.aspx
Input
Frontend input validation
●
User experience
●
Stop unwanted input when it occurs
●
Do not bother your server with crazy in...
Frontend input validation
●
User experience
●
Stop unwanted input when it occurs
●
Do not bother your server with crazy in...
Frontend input validation
Frontend input validation
●
User experience
●
Stop unwanted input when it occurs
●
Do not bother your server with crazy in...
Magento Frontend Validation
Magento 1 (51 validation rules)
js/prototype/validation.js
Magento 2 (74 validation rules)
app...
app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js
min_text_length
max_text_length
max-words
min-words
range-wor...
Add your own validator
define([
'jquery',
'jquery/ui',
'jquery/validate',
'mage/translate'
], function ($) {
$.validator.a...
M
2
<form>
<div class="field required">
<input type="email" id="email_address"
data-validate="{required:true, 'validate-
email...
Why frontend validation is not enough...
https://quadhead.de/cola-hack-sicherheitsluecke-auf-meinecoke-de/
Don't trust the user.
Don't trust the input!
Why validate input?
User form input
Database query results
Web Services
Server variables
Cookies
Validate input rules
Magento 1
Mage_Eav_Attribute_Data_Abstract
Magento 2
MagentoEavModelAttributeDataAbstractData
MagentoEavModelAttributeDataAbstractData
Input Validation Rules
– alphanumeric
– numeric
– alpha
– email
– url
– date
M
2
ZendValidator
Standard Validation Classes
Alnum Validator
Alpha Validator
Barcode Validator
Between Validator
Callback Val...
Output
Is input validation not enough?
●
Cross Site Scripting (XSS)
– Protect your users
– Protect yourself!
●
Store escaped data...
Use
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
...also Magento does it!
Magento 2 Templates XSS security
<?php echo $block->getTitleHtml() ?>
<?php echo $block->getHtmlTitle() ?>
<?php echo $blo...
Magento 2 Templates XSS security
●
Static Test: XssPhtmlTemplateTest.php in
devtestsstatictestsuiteMagentoTestPhp
●
See
ht...
magento dev:tests:run static
What happend to the little
attribute?
●
Weird customers and customer data was removed
●
Frontend validation added
•
Dropdown (whitelist) would have been an opti...
Summary
Think, act and design your software responsibly:
1) UTF-8 all the way
2) Client side validation, filter input
3) S...
</happy>
Thank you!
Questions?
@rescueAnn
a.voelkl@limesoda.com
Secure input and output handling - Magento Meetup Vienna Edition
Secure input and output handling - Magento Meetup Vienna Edition
Nächste SlideShare
Wird geladen in …5
×

Secure input and output handling - Magento Meetup Vienna Edition

2.210 Aufrufe

Veröffentlicht am

Modified "Secure input and output handling talk" for the Magento Stammtisch/Meetup in Vienna on February 24th, 2016

Veröffentlicht in: Software
0 Kommentare
3 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.210
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1.507
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
3
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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 http://de.slideshare.net/avoelkl/secure-input-and-output-handling-57946042
  3. 3. Anna Völkl / @rescueAnn  Hi, I'm Anna. http://anna.voelkl.at  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 http://onemilliondollarhomepage.ru/ 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) https://www.owasp.org/index.php/Top10#OWASP_Top_10_for_2013
  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. http://blogs.technet.com/b/rhalbheer/archive/2011/01/14/real-physical-security.aspx
  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... https://quadhead.de/cola-hack-sicherheitsluecke-auf-meinecoke-de/
  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 http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html
  33. 33. Magento 2 Templates XSS security ● Static Test: XssPhtmlTemplateTest.php in devtestsstatictestsuiteMagentoTestPhp ● See http://devdocs.magento.com/guides/v2.0/frontend- 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 a.voelkl@limesoda.com

×