Skip to content

Instantly share code, notes, and snippets.

@GusAntoniassi
Last active February 13, 2019 00:47
Show Gist options
  • Save GusAntoniassi/ddeac158d078f63a39be320a4348c4b9 to your computer and use it in GitHub Desktop.
Save GusAntoniassi/ddeac158d078f63a39be320a4348c4b9 to your computer and use it in GitHub Desktop.
Resumo de algumas palestras que aconteceram na PHP Weekend 2018, em Maringá

PHP 7: Show me the code

Palestrante: Er Galvão Abott

PHP 7.0.X

CSPRNG

  • Algorítmo pseudorandômico, criptograficamente seguro
  • Lança exception se o random do sistema operacional não for seguro
  • Gerar string aleatória: bin2hex(randomBytes($length))

Session Start Options

  • Configurar sessão de forma programática
  • Diferentes usuários podem ter diferentes sessões
  • Usuário não autenticado deveria estar na sessão também

Filtered unserialize

  • unserialize por padrão invoca o método destrutor
  • Vulnerabilidade: Injeção de código via método destrutor (ex. JSON)
  • Parâmetro allowed_classes permite filtrar
    • TRUE: Normal, executa o destrutor
    • FALSE: Nenhum método especial executado. Objeto vira __PHP_Incomplete_Class
    • ['Foo', 'Bar', 'Baz']: Permite apenas essas classes

Null Coalesce

  • $foo = $bar['baz'] ?? false;
  • Açucar sintático para isset + if ternário
  • Evita repetição - maior repetição = maior chance de erro

Classes anônimas

new class (1, 'Bar') {
  private $foo
  
  public function __construct($foo, $bar) {
    // ...
  }
}

STH RTD Strict

  • Modo strict para tipos de parâmetros e retorno
  • declare(strict_types = 1)
  • STH = Scalar Type Hint
  • RTD = Return Type Decoration
  • Strict = Desativa type juggling
    • Lança fatal error quando não respeitar o tipo declarado

Group Use Decorations

  • Use de vários namespaces ao mesmo tempo
Use Foo\{
  Foo,
  Bar\Baz
}

Spaceship Operator (<=>)

  • Comparação de maior, igual ou menor
  • Especialmente útil em algorítmos de ordenação
  • Serve para números, arrays, strings
  • Retorna 1 se o valor à esquerda for maior, 0 se forem iguais e -1 se for menor

PHP 7.1.X

Session GC

  • Permite desabilitar/rodar o garbage collector programaticamente
  • session_start([ 'gc_probability' => 0 ]);
  • session_gc()

Multi Catch

try {
  // ...
} catch (\Foo | \Bar $exc) {
  // ...
} 

Constant Visibility

  • public, private e protected para constantes

Retorno void

  • Permite declarar retorno "void" em métodos e funções
  • public function foo() : void
  • Na função, usar return; ou não usar return

Nullable types

  • function foo(?int $bar = 0);

PHP 7.2.X

Libsodium

Object Typehint

  • Para retorno de objetos sem determinar o tipo
  • function foo() : object

PDOStatement Debug

  • Permite debugar prepared statements com o PDO (antes não mostrava a query final)
  • $sth->debugDumpParams()

Argon 2

  • Vencedor de uma competição para criar um novo hash
  • password_hash('123456', PASSWORD_ARGON2I)
  • Suporte extendido no PHP 7.3

Fechamento

  • http://wiki.php.net/rfc
    • Changelog
    • Votação de features
  • PHP 7.4
    • Atributos tipados (private int $foo)
    • Argon 2
    • Null Coalesce Equal

Como o uso excessivo de design patterns pode atrapalhar o resultado de uma aplicação

Palestrante: Fernando Fabricio

O que é um Design Pattern

  • Solução para problemas recorrentes
  • Padrão de código
  • Identificar problemas, aplicar patterns

Jeff Atwood

  • Co-fundador do stackoverflow
  • Em um blog post sobre design patterns:
    • Adiciona complexidade
    • Soluções simples devem ser tentadas primeiro
    • Muitos problemas de design podem indicar que aquela linguagem não serve para o que você está tentando fazer (ou você está fazendo errado)

Design patterns

  • São aliadas, quando usadas corretamente
  • É necessário aprender onde usar
  • Perigo: Querer aplicar em todo lugar
    • Nós humanos quando aprendemos alguma coisa nova já queremos aplicar ela em todo lugar

Design Patterns Explained Simply

Categorias:

  • Criacionais
    • Instanciação das classes e objetos
    • Herança e delegação
    • Delegação > Herança
    • Exemplos: Object pool, prototype, etc.
  • Estruturais:
    • Composição das classes
    • Heranças para comportamentos
    • Objetos compostos
    • Exemplos: Adapter, bridge, decorator, etc.
  • Comportamental:
    • Comunicação entre objetos
    • Princípio SOLID
    • Exemplos: Chain of reference, iterator, etc.

Exemplos no GitHub

Não deu pra acompanhar o resto da palestra :|


Docker + PHP

Palestrante: Pedro Mázala

Docker

  • Tipo uma VM, só que bom
  • Gerencia imagens e containers
    • Fazendo uma analogia à POO, imagens = classes; container = objeto
  • Imagens são pré-construídas
  • Docker só carrega as bibliotecas e binários, não carrega o SO inteiro junto igual as VMS

Por quê?

  • Atomicidade - Não rodar PHP e MySQL na mesma máquina por ex.
  • Evita Dependency Hell - Exemplo: Precisar rodar Python 2 e 3 no mesmo projeto
  • Portabilidade - Roda em qualquer lugar
  • Escala horizontal
  • 12 Factor App
    • 12 fatores para tornar um app escalável horizontalmente
  • Facilita CI / CD
    • Testes realizados em cima da imagem do Docker
  • Ambientes semelhantes para desenvolvimento e produção
  • Possibilidade de fazer commit de um container
  • Possibilidade de fazer save/load de uma imagem (backup.tar)

Problemas com PHP

  • Libs dependem do SO
  • Versões diferentes (5.2 x 7.2)
  • Difícil de lidar com MsSQL
  • Configurações específicas (.ini)

Nginx

  • Processamento fora da máquina
  • php-fpm: Nginx faz requisição externa para executar código PHP, apenas em arquivos .php

Live demo (Código no GitHub)


Os 4 pilares da segurança

Palestrante: Er Galvão Abott

  • posphp.alfaumuarama.com.br
  • Os seguintes aspectos não interferem na segurança de aplicações
    • Linguagem
    • Tipagem
    • Paradigma
    • Padrão de programação
  • Segurança deve ser um goal desde o início do projeto
  • Top 10 OWASP (Link)

1º pilar: Filtragem

  • Tratar o dado, manter apenas o que é legítimo
  • Nem toda "injeção" é hack, o usuário pode apenas ter digitado errado
  • Guardar o dado original
    • Informações mais claras sobre o porquê
    • Registrar tentativas (log)

2º pilar: Validação

  • Não é só tipo de dados que deve ser validado
  • Web não tem tipo!
  • Validar valor, comprimento, formato, etc

3º pilar: Hashing

  • Validar integridade da informação
  • MD5 e SHA1 não são mais úteis
  • Hashing não é só pra senha
    • Qualquer dado que não precisa ser lido deve estar hasheado

4º pilar: Criptografia

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment