Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kristiansand php meeting #1

3,349 views

Published on

KristiansandPHP, første møte

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Kristiansand php meeting #1

  1. 1. KristiansandPHP PHP-nytt fra London, og frontend fokus på skjema Møte nr 1
  2. 2. PHP user groups
  3. 3. Norden: København, Helsinki og Kristiansand
  4. 4. Agenda ❖ 18:00 velkommen ❖ 18:15 PHP fokus ❖ 19:00 pizza! ❖ 19:15 frontend fokus ❖ 19:45 uformell mingling ❖ 20:00 ferdig
  5. 5. Kort om Morten ❖ Jobbet som webutvikler (frontend og fullstack) i 13 år ❖ Perl, Java, PHP, ASP og ASP.NET ❖ Jobbet for Ericsson, Logit-Systems, Current Software og Netlab ❖ Bakgrunn fra drift, support og opplæring ❖ Hobby-firma, getOnWeb i 12 år 
 (av og til er det litt kjedelig på jobb…)
  6. 6. Hvem er vi? ❖ Navn? ❖ Firma? ❖ Hva du lager? ❖ Hvor mange år har du programmert i? ❖ Hvilke andre språk har du jobbet med? ❖ IDE/editor?
  7. 7. http://phpconference.co.uk/ https://joind.in/event/view/3063 https://youtu.be/os1-plBMaKU? list=PL_aPVo2HeGF_VdlTpUF6ViNg LC7Raph0i PHP UK 
 Conference 2015 Morten har vært på PHP UK Conference 2015 nettopp, og kom hjem til Norge med mange impulser og fantastiske opplevelser. 700 PHP-nerder samlet i 2 hele dager, foredragsholdere fra USA, Italia, Tyskland og England :-)
  8. 8. Alle andre… ❖ Objekt orientert programmering, alt annet er latterlig… ❖ GIT er selvsagt ❖ Composer er forventet ❖ API, det er kult og alle bruker det ❖ Community, dersom du ikke er en del av det, så går du glipp av mye!
  9. 9. Coderabbi`s råd for læring ❖ Mentor ❖ Lær av andre ❖ Det er mye læring i å lære til andre ❖ Kollega ❖ Code review (begge kan lære) ❖ Open source (viktig for egen læring) ❖ Rubber ducking (code review self) ❖ Pair coding / ekstrem programmering
  10. 10. Lornajane – nytt i PHP ❖ Er du på eldre enn v5.5? Oppgrader! ❖ date.timezone må settes i v5.5 ellers kan det bli uforutsigbart ❖ Les E_STRICT loggen (nyttig til forbedring, spesielt ved oppgradering) ❖ Traits likner på klasser, men de er PHP snippets som blir "kopiert" inn ❖ Ny passord håndtering i PHP, salt og algoritme i passordet er sterkt anbefalt! ❖ password_hash() ❖ password_verify() ❖ Built-in OpCache, opensource fra Zend, men må enables ;-)
  11. 11. Jordi - Composer best practices ❖ Jordi og Adermann har lagd Composer ❖ Viktig med README.md ❖ Kommandoen "composer require " er enklere enn å hacke json-filen ❖ Bruk Packagist for å søke etter komponenter ❖ Vær bevist på hvilke versjoner du henter ned, spesialtegn hjelper med kontroll på dette: ❖ ^ ~ * er tegn som kan kombineres med versjonsnummer ❖ F.eks. ~2 vil gi alle updateringer av versjon, men ikke v3. Bra oppdatering/kontroll ❖ Og han anbefaler Monolog: ❖ Logs to files, sockets, inboxes, db, web services. ❖ Tips for optimalisering: ❖ -optimizer-autoload ❖ -prefer-dist
  12. 12. Javier, continuosly delivering ❖ git + github ❖ Jenkins ❖ Ansible ❖ Phing (tilsvarende Ant i Java....)
  13. 13. Rob Allan - API with Apigility (Zend) ❖ Bruk HTTP codes for alt det er verdt! ❖ Apigility provides the boring bits of API building: ❖ Content negotiation, versioning, validation, authentication, documentation ❖ Anbefaling: swagger.io og frisbyjs.com
  14. 14. HTTP Methods for RESTful Services PUT komplett replace PATCH enkelte endringer POST nye objekter DELETE sletting GET henting av data
  15. 15. Trust no one! ❖ Steps for input: 1. Filter fikser input. Eks: trim(); 2. Validering av filtrert data. Eks: epost sjekk, steng lengde ❖ HTTP codes for errors: ❖ 400: client error ❖ 422: partly wrong data ❖ Gi klare feilmeldinger
  16. 16. Versjon i URL eller i Accept?
  17. 17. Hypermedia in JSON (Collection)
  18. 18. Authentication ❖ HTTP Basic (htpassword) and Digest, for internal APIs ❖ OAuth2 (Facebook, Google…), for public APIs ❖ Correct errors: 401, 403, etc.
  19. 19. MVVM and Silex ❖ Halve salen bruker Silex (Symfony light...) ❖ Bower.io er tilsvarende Composer ❖ MVVM rammeverk: ❖ Angular (mest populært) ❖ Backbone (lang fartstid)
  20. 20. AngularJS fra Google er populær...
  21. 21. OWASP.org - top 10, av Gary Hockin ❖ Basert på omfang og alvorlighetsgrad, har OWASP kommet fram til de viktigste sårbarhetene. ❖ Listen revideres jevnlig.
  22. 22. 10. UNVALIDATED REDIRECTS AND FORWARDS ❖ Alternative løsninger: ❖ Whitelist ❖ Bare interne lenker på forward
  23. 23. 9. USING COMPONENTS WITH KNOWN VULNERABILITIES ❖ COMPOSER === EPIC
 COMPOSER === BAD
 
 Not just your dependencies, but the dependencies of the 
 dependencies of the dependencies…
  24. 24. 8. CROSS-SITE REQUEST FORGERY (CSRF) ❖ Use only POST ❖ Require user interaction ❖ Don’t use sticky logins for anything that important ❖ Use CSRF token ❖ Eks: neste gang
 du går inn på
 Amazone, så er 
 det kanskje en 
 ukjent bok i
 handlevognen din…
  25. 25. 7. MISSING FUNCTION LEVEL ACCESS CONTROL ❖ F.eks: 
 
 delete, uten rettighets sjekk
  26. 26. 6. SENSITIVE DATA EXPOSURE ❖ If you’re loading your form over http you’re already too late ❖ Password_hash ❖ Don’t store sensitive data at all ❖ Listen to an expert @ircmaxell ❖ You’re a developer, not a security expert ❖ “Don’t store naked pictures of yourself on a a cloud server you don’t control"
 - Gary Hockin
  27. 27. 5. SECURITY MISCONFIGURATION ❖ You’re a developer, not a security expert ❖ You’re a developer, the code is your problem
  28. 28. 4. INSECURE DIRECT OBJECT REFERENCES ❖ F.eks hacke url og få tilgang til noe du ikke burde
  29. 29. 3. CROSS-SITE SCRIPTING (XSS) ❖ Escape all user input all the time ❖ Whitelist allowable characters rather than blacklisting bad characters ❖ Good escaping libraries are out there
  30. 30. 2. BROKEN AUTHENTICATION AND SESSION MANAGEMENT ❖ Session.Use_only_cookies ❖ Session regeneration ❖ Password confirmation, inni applikasjonen for ekstra sikkerhet på enkelte elementer ❖ “Secure” sessions:
 $_SESSION[‘ipAdr’] = $ipAdr;
 if ($ipAdr!== $_SESSION[‘ipAdr’]) 
 session_destroy();
  31. 31. 1. INJECTION ❖ Filter all the tings all the time!
 
 news.php?news_id=;DROP TABLE news;
  32. 32. Enda et injection eksempel ❖ login.php?user=m.moss&password=1’%20OR%201=1;
  33. 33. PHP har innebygd filter funksjon ❖ $username = filter_var($_GET[‘username’], FILTER_SANITIZE_EMAIL);
 ❖ $priority=filter_input(INPUT_GET, 'priority', FILTER_VALIDATE_INT);
  34. 34. Use parameterised queries (binding) ❖ $stmt = $pdo->prepare(
 'SELECT user_id FROM user WHERE
 username = :username & password = :password’);
 ❖ $result = $stmt->execute([
 ‘username’ => $username,
 ‘password’ => $password]);
  35. 35. PHP binding mot Oracle db $stid = oci_parse($conn,"INSERT INTO mytab (id, text) VALUES(:id_bv, :text_bv)”); oci_bind_by_name($stid, ":id_bv", $id); oci_bind_by_name($stid, ":text_bv", $text); oci_execute($stid);
  36. 36. My debugging and performance toolbox ❖ Charles - http proxy (Fidler for Windows brukere) ❖ XDebug - remote debugging, tips: ini_set("xdebug.scream") ❖ Xhprof - profiling ❖ JMeter - load testing ❖ PHPunit - unit testing ❖ Behat - behavior-driven development ❖ https://github.com/lovesoftware
  37. 37. Frontend - skjema
  38. 38. Skjema - et nødvendig onde… ❖ Skjema står mellom bruker og mål ❖ Login -> tilgang ❖ Registrering ->gi veldighet ❖ Gi info -> få nedlastning ❖ Selvbetjening ❖ Bestille sydentur ❖ Søk og filtrering
  39. 39. Konvertering ❖ Tommelfinger regel: 5% reduksjon pr felt i skjema ❖ Det man forstår vil man lettere oppgi ❖ Det man ikke forstår, vil man være motvillig til å oppgi ❖ Graden av motivasjon har innvirkning på hvor mye motstand man orker å jobbe seg gjennom ❖ Kan du flytte noen spørsmål/valg til etterpå?
  40. 40. Bedre skjema ❖ Økt omsetning ❖ Lavere administrasjonskostnader ❖ Fornøyde brukere
  41. 41. Don`t make me think ❖ Tekstene er viktige, både label, placeholder, hjelpetekst og feilmelding ❖ Bruk riktig input type ❖ Riktig rekkefølge ❖ Intern og ekstern konsekvent design, ikke vær “kreativ” ❖ Det er bedre å fikse, enn å komme med feilmelding (trim, regex, uppercase osv)
  42. 42. Don`t waste my time ❖ Ikke spørr om unødvendigheter ❖ Ikke tving meg til å lese lange tekster ❖ Bruk oppslag på postnr, mobil, medlemsnr osv (spesielt viktig på mobile devicer, der inntasting er kostbart) ❖ Ikke spørr om noe som systemet kan/bør vite, er du innlogget, eller kommer via en PURL, så utnytt det til å gjøre det enkelt for bruker ❖ Det som er inn nå, er å gjette hva bruker vil, og så heller ha en undo-mulighet. Noen valg er opplagte…
  43. 43. Brukervennlighet ❖ Tips og hjelp nærme feltet ❖ Feilmelding som er til hjelp ❖ Tydlig design på feilmeldinger ❖ Validering med JavaScipt (evt. ajax, om det trengs en tur til serveren) ❖ Possitiv validering kan i noen tilfeller forbedre skjema betraktelig (f.eks. om ønsket brukernavn er ledig)
  44. 44. Standard fargebruk
  45. 45. Captcha er dårlig brukeropplevelse ❖ Bruk heller et skjult felt ❖ Som skal være tomt ❖ Som skal ha fast innhold ❖ Som skal ha et bestemt innhol, som du programmer mot, serverside
  46. 46. UU - Universal Utforming ❖ http://uu.difi.no/veiledning/nettsider/uu-skolen ❖ Mange krav til skjema ❖ Label koblet med for=id ❖ Hjelpetekster og feilmeldinger ❖ Knapper må være tydelig knapper ❖ Tastatur navigering
  47. 47. HTML kode ❖ pattern og required er glimrende for validering ❖ novalidate på skjema hindrer browser fra å validere, bedre at vi gjør det ❖ data- gir oss utrolig mange mulighet, f.eks. data- msg=“Vi trenger din e-post for….”
  48. 48. Litt jQuery har aldri skadet noen… ❖ // vise felt for e-post, dersom man vil ha nyhetsbrev
 $(“#nyhetsbrev”).on(“change”, function(){
 if($(this).is(“:checked”))
 $(“#epost”).slideDown();
 else
 $(“#epost”).slideUp();
 }); ❖ // vis resten av skjema, dersom bruker trykker på knappen
 $(“#add”).on(“click”, function(){
 $(this).remove();
 $(“#more”).fadeIn();
 });
  49. 49. PHP snacks ❖ $c = $a ?: $b; ❖ $_POST=array_map(‘trim’,$_POST); ❖ $array = (array)$object; ❖ if (!isset($_SESSION)) 
 session_start(); ❖ /* @var $item ItemModel */
 echo $item->title;
  50. 50. Tools og anbefalinger ❖ http://snipsave.com - ta vare på code snippets ❖ https://security.sensiolabs.org/check - sjekk composer.lock ❖ https://www.transformy.io/#/app - alternativ til Excel for å jobbe med copy&paste og export/import ❖ http://www.webpagetest.org
  51. 51. jQuery plugins ❖ http://digitalbush.com/projects/masked-input-plugin ❖ http://bootboxjs.com ❖ http://harvesthq.github.io/chosen

×