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

Precisamos conversar sobre a segurança de sua aplicação PHP

Precisamos conversar sobre a segurança de sua aplicação PHP

Slides da palestra ministrada no PHPSP Santos Talks #1 - 2016. Precisamos conversar
sobre a segurança de sua aplicação PHP! Uma introdução sobre o assunto, com algumas dicas relevantes e conceitos importantes. Ih, até rimou

Gustavo Pereira

March 28, 2016
Tweet

More Decks by Gustavo Pereira

Other Decks in Technology

Transcript

  1. Gustavo Pereira 12 anos na área de TI Bacharel em

    Ciências da Computação Tecnólogo em Processamento de Dados Zend Certified PHP Engineer 5.5 Desenvolvedor PL na MT4 Networks http://www.mt4networks.com.br
  2. Então vamos partir de alguns princípios Não existe sistema 100%

    seguro Um dia seu sistema será invadido (pode não ser no seu mandato) mesmo que seja por você mesmo em um pentest
  3. Display_errors em dev Display_errors = 1 Em prod Display_errors =

    0 Log_errors = 1 error_log = ’[arquivo.log]’
  4. Resumindo melhor Não confie em nada que venha de maneira

    inesperada/indesejada ou não filtrada
  5. filter_var ($var, FILTER_VALIDATE_ ); <?php $email = "[email protected]"; var_dump(filter_var($email,FILTER_VALIDATE_EMAIL)); $email

    = " [email protected]` OR 1=1; /* "; var_dump(filter_var($email,FILTER_VALIDATE_EMAIL)); PS: O var_dump é apenas para exemplificar
  6. filter_var ($var, FILTER_VALIDATE_ ); <?php $url= ”http://www.facebook.com"; var_dump(filter_var($url, FILTER_VALIDATE_URL)); $url=

    ”javascript://comment%0Aalert(1)"; var_dump(filter_var($url, FILTER_VALIDATE_URL)); PS: O var_dump é apenas para exemplificar
  7. PDO Sempre ( + prepared statement) Compila as consultas SQL

    e usa placeholders select nome from produto where id = ? insert into carro values (?,?,?)
  8. PDO Sempre ( + prepared statement) <?php /* Execute a

    prepared statement by binding PHP variables */ $calories = 150; $colour = 'red'; $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $sth->bindParam(':calories', $calories, PDO::PARAM_INT); $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); $sth->execute(); //http://php.net/manual/pt_BR/pdostatement.bindparam.php
  9. ORM facilita a adoção de boas práticas Table Data Gateway

    Row Data Gateway Data Mapper Active Record
  10. Procure saber de onde vem a sua lib favorita O

    que ela faz, como se comporta...