Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP e Segurança: é possível - PHPConference BR 2019

Diana Arnos
December 06, 2019

PHP e Segurança: é possível - PHPConference BR 2019

Por muito tempo, qualquer aplicação em PHP era automaticamente considerada insegura por muita gente.
Dificilmente um desenvolvedor pensava em termos de segurança e aplicações web eram porcamente construídas e se apresentavam cheias de brechas.
Hoje, as versões mais recentes do PHP disponibilizam ferramentas de segurança e criptografia moderna, além de iniciativas internas focadas em segurança terem sido retomadas. Mas, infelizmente, o PHP não resolve tudo sozinho, é necessário que os desenvolvedores tenham um mínimo de preocupação e conhecimento sobre desenvolvimento seguro.
Vamos conhecer as mais recentes iniciativas da linguagem a esse respeito e também alguns dos problemas mais comuns de design de código para sabermos o que evitar durante a fase de design e implementação.

Diana Arnos

December 06, 2019
Tweet

More Decks by Diana Arnos

Other Decks in Programming

Transcript

  1. PHP E SEGURANÇA
    Sim, é possível

    View Slide

  2. @dianaarnos
    Dev, Sec, Music, Kung Fu.
    Engenheira de Software @ Blackfire.io
    Arquiteta e Desenvolvedora @ MT4
    Evangelista @ PHPSP
    Evangelista @ PHPWomenBR

    View Slide

  3. PHP AINDA É A LINGUAGEM MAIS
    UTILIZADA NA WEB

    View Slide

  4. View Slide

  5. https://w3techs.com/

    View Slide

  6. https://w3techs.com/

    View Slide

  7. https://w3techs.com/

    View Slide

  8. https://w3techs.com/

    View Slide

  9. https://w3techs.com/

    View Slide

  10. PHP É POPULAR
    E ISSO É ÓTIMO

    View Slide

  11. https://w3techs.com/

    View Slide

  12. https://w3techs.com/

    View Slide

  13. MAS JAVA É CONFIÁVEL

    View Slide

  14. View Slide

  15. PHP ESTÁ NO TOP 5 DAS LIGUAGENS
    MAIS TEMIDAS, SEGUNDO A ÚLTIMA
    PESQUISA DO STACK OVERFLOW

    View Slide

  16. https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted

    View Slide

  17. View Slide

  18. PHP É UMA LINGUAGEM VISTA COMO
    INSEGURA E NÃO-CONFIÁVEL

    View Slide

  19. HÁ UMA RECEITA PARA ISSO:

    View Slide

  20. BAIXA CURVA DE APRENDIZADO

    View Slide

  21. BAIXA CURVA DE APRENDIZADO
    +
    FÁCIL TRABALHAR COM
    REQUEST/RESPONSE

    View Slide

  22. BAIXA CURVA DE APRENDIZADO
    +
    FÁCIL TRABALHAR COM
    REQUEST/RESPONSE
    +
    VELOCIDADE DE IMPLEMENTAÇÃO

    View Slide

  23. View Slide

  24. View Slide

  25. E TEM MAIS COISA AÍ:

    View Slide

  26. https://w3techs.com/

    View Slide

  27. https://w3techs.com/

    View Slide

  28. PHP 4?

    View Slide

  29. View Slide

  30. https://w3techs.com/

    View Slide

  31. https://w3techs.com/

    View Slide

  32. VAMOS DAR UMA OLHADA NAS
    VERSÕES DE PHP QUE AINDA TÊM
    SUPORTE

    View Slide

  33. https://www.php.net/supported-versions.php

    View Slide

  34. https://www.php.net/supported-versions.php

    View Slide

  35. https://w3techs.com/

    View Slide

  36. https://w3techs.com/

    View Slide

  37. https://w3techs.com/

    View Slide

  38. https://w3techs.com/

    View Slide

  39. https://w3techs.com/

    View Slide

  40. https://www.php.net/supported-versions.php

    View Slide

  41. https://www.php.net/supported-versions.php

    View Slide

  42. https://w3techs.com/

    View Slide

  43. https://w3techs.com/

    View Slide

  44. ENTÃO, APESAR DE 79% DA WEB
    RODAR EM PHP...

    View Slide

  45. 43,9% É PHP 7x

    View Slide

  46. 43,9% DE 79% ≅ 34,69%

    View Slide

  47. 34,69% DA WEB RODA EM PHP PHP 7x

    View Slide

  48. View Slide

  49. MAS…

    View Slide

  50. MAS…
    45,1% DESSES 34,69%, É PHP 7.0 E 7.1

    View Slide

  51. MAS…
    45,1% DESSES 34,69%, É PHP 7.0 E 7.1
    SEM SUPORTE.

    View Slide

  52. ENTÃO NOS SOBRAM 54,9% DESSES
    34,69%

    View Slide

  53. 54,9% DE 34,69% ≅ 19,04%

    View Slide

  54. ENTÃO...

    View Slide

  55. APENAS 19,04% DAS APLIAÇÕES WEB
    PHP ESTÃO RODANDO VERSÕES
    ATUALIZADAS E SEGURAS

    View Slide

  56. View Slide

  57. E DAÍ?

    View Slide

  58. https://www.cvedetails.com

    View Slide

  59. https://www.cvedetails.com
    *Common Vulnerabilities and Exposures

    View Slide

  60. https://www.cvedetails.com

    View Slide

  61. https://www.cvedetails.com

    View Slide

  62. https://www.cvedetails.com

    View Slide

  63. https://www.cvedetails.com

    View Slide

  64. https://www.cvedetails.com

    View Slide

  65. https://www.exploit-db.com/

    View Slide

  66. https://www.exploit-db.com/

    View Slide

  67. https://www.exploit-db.com/

    View Slide

  68. https://www.exploit-db.com/

    View Slide

  69. https://www.exploit-db.com/

    View Slide

  70. https://www.exploit-db.com/

    View Slide

  71. https://www.exploit-db.com/

    View Slide

  72. https://www.exploit-db.com/

    View Slide

  73. View Slide

  74. PRIMEIRA DICA BÁSICA DE
    SEGURANÇA:

    View Slide

  75. SEMPRE USE VERSÕES DE PHP
    ATUALIZADAS E COM SUPORTE ATIVO

    View Slide

  76. View Slide

  77. OBRIGADA!

    View Slide

  78. A LINGUAGEM ESTÁ EVOLUINDO

    View Slide

  79. SEGURANÇA É UMA DAS SUAS
    MAIORES PREOCUPAÇÕES

    View Slide

  80. E O QUE FOI FEITO NESSE PONTO?

    View Slide

  81. PHP 7.0
    FILTERED UNSERIALIZE( )

    View Slide

  82. unserialize($data, ["allowed_classes" => ["ClassOne", "ClassTwo"]]);

    View Slide

  83. PHP 7.0
    FILTERED UNSERIALIZE( )
    CSPRNG FUNCTIONS
    RANDOM_BYTES( )
    RANDOM_INT( )

    View Slide

  84. PHP 7.1

    View Slide

  85. PHP 7.2
    PASSWORD_ARGON2I

    View Slide

  86. PHP 7.2
    PASSWORD_ARGON2I
    LIBSODIUM COMO CORE
    EXTENSION

    View Slide

  87. PHP 7.2
    PASSWORD_ARGON2I
    LIBSODIUM COMO CORE
    EXTENSION
    MCRYPT REMOVIDA DO CORE

    View Slide

  88. PHP 7.3
    NOVAS IMPLEMENTAÇÕES DE
    ARGON2
    ARGON2I
    ARGON2D
    ARGON2ID

    View Slide

  89. PHP 7.4
    OPÇÃO 'MAX_DEPTH' NA
    UNSERIALIZE( ) (E UM INI SETTING
    TAMBÉM)
    MUDANÇAS NA PROC_OPEN( )
    PASSWORD_HASH( ) AGORA TEM
    ARGON2I(D) POR PADRÃO

    View Slide

  90. ESSAS FEATURES AJUDAM A
    CONSTRUIR UMA LINGUAGEM MAIS
    SEGURA

    View Slide

  91. E COMO CONSTRUIR UMA APLICAÇÃO
    MAIS SEGURA?

    View Slide

  92. ALGUMAS BOAS PRÁTICAS:

    View Slide

  93. ATUALIZE O PHP REGULARMENTE

    View Slide

  94. ATUALIZE PACKAGES REGULARMENTE

    View Slide

  95. SENSIOLABS/SECURITY-CHECKER

    View Slide

  96. HTTPS SEMPRE

    View Slide

  97. NUNCA EXIBIR ERROS E WARNINGS

    View Slide

  98. FILTRAR E VALIDAR TODO TIPO DE
    DADO

    View Slide

  99. SEMPRE USE QUERIES
    PARAMETRIZADAS
    (PREPARED STATEMENTS)

    View Slide

  100. DEFINIR OPEN_BASEDIR NO PHP.INI

    View Slide

  101. ATENÇÃO ESPECIAL AO LIDAR COM
    SESSÕES DE USUÁRIO

    View Slide

  102. CSRF TOKENS EM FORMULÁRIOS

    View Slide

  103. LEMBRE-SE:

    View Slide

  104. ATUALIZE O PHP PARA EVITAR LIDAR COM
    VULNERABILIDADES NÃO CORRIGIDAS
    LEMBRE-SE:

    View Slide

  105. ATUALIZE O PHP PARA EVITAR LIDAR COM
    VULNERABILIDADES NÃO CORRIGIDAS
    SEMPRE CONFIRA AS BIBLIOTECAS EXTERNAS
    QUE UTILIZA
    LEMBRE-SE:

    View Slide

  106. REFERÊNCIAS
    http://bit.ly/diana-ref

    View Slide

  107. SLIDES
    http://bit.ly/diana-slides

    View Slide

  108. OBRIGADA!
    Fale comigo: @dianaarnos

    View Slide