melhores práticas de segurança do PHP

 guia de segurança do php

como o PHP é o backbone para quase todos os sites, portanto, a segurança do PHP não deve ser considerada insignificante a qualquer custo. No entanto, os desenvolvedores PHP têm o privilégio de evitar ameaças comuns, como falsificação de solicitações entre sites, injeções de SQL e adulteração de dados. E tudo isso é útil com a ajuda de recursos de segurança integrados do PHP que tornam mais fácil para os desenvolvedores proteger o site.

PHP é dito ser a linguagem mais poderosa do lado do servidor, PHP utiliza 80 por cento da web do mundo, com top 10 milhões de domínios. Por esta razão em si, é entender que o PHP irá ajudá-lo a proteger contra atacantes.

proteger aplicativos da web de todos os tipos de tentativas de ataque forjadas é o dever final de um desenvolvedor da web. Você deve criar seus aplicativos da web Protetores o suficiente para não ter problemas de segurança ou brechas.

PHP é a linguagem de programação web do lado do servidor mais usada em todo o mundo. Diferentes aplicativos PHP compartilham diferentes partes de seu código e scripts com outros aplicativos da web. Caso o código compartilhado seja detectado vulnerável, todos os aplicativos que usam esse código compartilhado são colocados em risco e considerados vulneráveis.

Mantenha seus aplicativos seguros na nuvem

o Cloudways oferece 2FA, SSL gratuito e recursos de segurança mais avançados em servidores gerenciados que mantêm seu aplicativo seguro.

PHP é a linguagem de script mais criticada quando se trata de segurança. Um grande número de desenvolvedores e especialistas em QA acha que o PHP não tem técnicas robustas para proteger aplicativos. O veredicto também tem algum fundamento porque o PHP é a linguagem mais antiga e amplamente usada para o desenvolvimento de aplicativos da web. Mas há muito tempo desde o PHP 5.6, não vimos nenhuma atualização importante em relação à segurança e, portanto, a linguagem enfrenta alguns problemas de segurança.

quão seguro é o PHP

o PHP é tão seguro quanto qualquer outra linguagem importante. O PHP é tão seguro quanto qualquer linguagem principal do lado do servidor. Com os novos frameworks e ferramentas PHP introduzidos nos últimos anos, agora é mais fácil do que nunca gerenciar a segurança de alto nível.

se fizermos uma comparação, o PHP será protegido uniformemente. Rails, Java, Javascript e outras linguagens, todos tiveram suas vulnerabilidades ao longo dos anos. “Se você encontrar uma linguagem que não tenha tido uma vulnerabilidade de alguma forma ou forma, você pode escrever código seguro em PHP perfeitamente bem.

Problemas de Segurança em PHP CMS

Popular CMS como o WordPress, Joomla, Magento e Drupal são construídos em PHP, e de acordo com a Sucuri, a maioria das vulnerabilidades no PHP CMS veio à tona durante o ano 2017:

  • WordPress problemas de segurança aumentou de 74% em 2016 Q3 para 83% em 2017.
  • os problemas de segurança do Joomla caíram de 17% no 3º trimestre de 2016 para 13,1% em 2017.
  • os problemas de segurança do Magento aumentaram marginalmente de 6% no terceiro trimestre de 2016 para 6,5% em 2017.
  • os problemas de segurança do Drupal caíram ligeiramente de 2% no terceiro trimestre de 2016 para 1,6% em 2017.

cms infecção comparação

cms infecção comparação

A situação atual não é boa o suficiente, mas graças a contribuições open source, que estão se esforçando para superar os problemas e nós temos visto algumas mudanças drásticas em PHP da tarde. PHP 7.x foi lançado no ano passado com várias atualizações e correções. A melhor coisa sobre o PHP 7.x refere-se às atualizações de segurança que realmente renovaram o protocolo de segurança do idioma.

o que este Tutorial de segurança PHP contém?

trabalho há muito tempo em questões de segurança e desempenho do PHP, sendo altamente ativo na comunidade PHP perguntando aos principais desenvolvedores sobre as dicas e truques que estão usando em seus projetos ao vivo. Portanto, o principal objetivo deste tutorial de segurança PHP é conscientizá-lo sobre as melhores práticas de segurança em aplicativos da web PHP. Vou definir os seguintes problemas e mencionar possíveis soluções para eles.

  • Atualização do PHP Regularmente
  • Cross site scripting (XSS)
  • Ataques de Injeção de SQL
  • Cross site request forgery XSRF/CSRF
  • Seqüestro de Sessão
  • Ocultar Arquivos do Navegador
  • Seguramente fazer o Upload de Arquivos
  • Usar Certificados SSL HTTPs
  • Implantar Aplicativos PHP em Nuvens

Nota: por favor, não considere como um completo cheat sheet. Deve haver maneiras melhores e soluções mais exclusivas que os desenvolvedores estariam aplicando em seus aplicativos para torná-lo perfeitamente seguro.

PHP Security Best Practice

ao criar um aplicativo da web PHP, um engenheiro da web deve se preocupar com as melhores práticas de segurança. Um aplicativo da web inseguro dá aos hackers a chance de obter dados valiosos, como informações do cliente ou detalhes do cartão de crédito. Além disso, uma violação de dados pode ter um efeito extremo na validade e nas operações futuras da sua organização.

atualize o PHP regularmente

agora, a versão mais estável e mais recente do PHP disponível é o PHP 8. Eu recomendo que você deve atualizar seu aplicativo PHP para este novo. Se você ainda estiver usando o PHP 5.6 ou 7, terá muitas depreciações ao atualizar aplicativos PHP. Você também precisará atualizar seu código e alterar algumas lógicas funcionais, como hash de senha, etc. Existem também algumas ferramentas disponíveis para verificar a depreciação do seu código e ajudá-lo a migrá-las. Listei algumas ferramentas abaixo:

  1. PHP Compatibility Checker
  2. PHP MAR
  3. Phan

se você estiver usando o PHPStorm, poderá usar o PHP 7 Compatibility Inspection, que mostrará qual código causará problemas.

Leia Mais: PHP Hosting on Cloudways

Cross-site scripting (XSS)

Cross site scripting é um tipo de ataque malicioso na web em que um script externo é injetado no código ou saída do site. O invasor pode enviar Código infectado para o usuário final, enquanto o navegador não pode identificá-lo como um script confiável. Esse ataque ocorre principalmente nos locais onde o usuário tem a capacidade de inserir e enviar dados. O ataque pode acessar cookies, sessões e outras informações confidenciais sobre o navegador. Vejamos o exemplo de uma solicitação GET que está enviando alguns dados por meio de URL:

URL: http://example.com/search.php?search=<script>alert('test')</script>$search = $_GET ?? null;echo 'Search results for '.$search;

você pode descobrir este ataque usando htmlspecialchars. Além disso, usando ENT_QUOTES, você pode escapar de aspas simples e duplas.Enquanto isso, os ataques XSS também podem ser executados por meio de atributos, esquemas URI codificados e codificação de código.

Leia Mais: prevenir XSS em Laravel

ataques de injeção SQL

a injeção SQL é o ataque mais comum em scripts PHP. Uma única consulta pode comprometer todo o aplicativo. No SQL injection attack, o invasor tenta alterar os dados que você está passando por meio de consultas. Suponha que você esteja processando diretamente os dados do usuário em consultas SQL e, de repente, um invasor anônimo usa secretamente caracteres diferentes para contorná-los. Veja a consulta SQL mencionada abaixo:

$sql = "SELECT * FROM users WHERE username = '" . $username . "';

o $ username pode conter dados alterados que podem danificar o banco de dados, incluindo a exclusão de todo o banco de dados em um piscar de olhos. Então, qual é a solução? PROVEDORIA. Eu recomendo que você sempre use declarações preparadas. O PDO ajuda você a proteger consultas SQL.

$id = $_GET ?? null;

a conexão entre o banco de dados e o aplicativo é feita com a instrução abaixo:

$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbusername', 'dbpassword');

você pode selecionar o nome de usuário com base no ID acima, mas espere! Aqui o código SQL ‘GET data’ é injetado em sua consulta. Tenha cuidado para evitar tais codificação e usar instruções preparadas em vez:

$sql = "SELECT username, email FROM users WHERE id = ".$id." ;foreach ($dbh->query($sql) as $row) { printf ("%s (%s)\n", $row, $row);}

Agora você pode evitar acima de injeção de SQL possibilidade usando

$sql = "SELECT username, email FROM users WHERE id = :id";$sth = $dbh->prepare($sql, );$sth->execute();$users = $sth->fetchAll();

Também, uma boa prática é usar ORM como doutrina ou eloqüente, como não existe a menor possibilidade de injecção de consultas SQL em si.

Leia Mais: Proteja o site PHP da injeção de SQL

falsificação de solicitação de site cruzado XSRF/CSRF

o ataque CSRF é bem diferente dos ataques XSS. No ataque CSRF, o usuário final pode executar ações indesejadas nos sites autenticados e pode transferir comandos maliciosos para o site para executar qualquer ação indesejável. O CSRF não consegue ler os dados da solicitação e visa principalmente a solicitação de alteração de Estado enviando qualquer link ou dados alterados em tags HTML. Ele pode forçar o usuário a realizar solicitações de alteração de Estado, como transferência de fundos, alteração de seus endereços de E-mail, etc. Vamos ver este URL em que se solicita é o envio de dinheiro para outra conta:

GET http://bank.com/transfer.do?acct=TIM&amount=100 HTTP/1.1

Agora, se alguém quer explorar o aplicativo web, ele/ela vai mudar a URL com o nome e a quantidade como este

http://bank.com/transfer.do?acct=Sandy&amount=100000

Agora, este URL pode ser enviado via e-mail em qualquer arquivo, Imagem, etc, e o intruso pode pedir-lhe para baixar o

arquivo ou clique na imagem. E assim que você faz isso, você instantaneamente acaba enviando uma enorme quantidade de dinheiro que você nunca conhece.

sequestro de sessão

o sequestro de sessão é um tipo particular de ataque malicioso na web no qual o invasor rouba secretamente o ID da sessão do Usuário. Esse ID de sessão é enviado para o servidor onde o array $_SESSION associado valida seu armazenamento na pilha e concede acesso ao aplicativo. O seqüestro de sessão é possível por meio de um ataque XSS ou quando alguém obtém acesso à pasta em um servidor onde os dados da sessão são armazenados.

para evitar o seqüestro de sessão, sempre vincule as sessões ao seu endereço IP para:

$IP = getenv ( "REMOTE_ADDR" );

observe – o ao trabalhar no localhost, pois ele não fornece o IP exato, mas:: 1 ou::: 127 valores do tipo. Você deve invalidar (unset cookie, unset session storage, remove traces) sessão rapidamente sempre que ocorrer uma violação e deve sempre tentar não expor IDs em nenhuma circunstância.

para cookies, a melhor prática é nunca usar dados serializados armazenados em um cookie. Os Hackers podem manipular cookies facilmente, resultando na adição de variáveis ao seu escopo. Exclua com segurança os cookies assim:

setcookie ($name, "", 1);setcookie ($name, false);unset($_COOKIE);

a primeira linha do Código garante que o cookie expire no navegador, a segunda linha descreve a maneira padrão de remover um cookie (portanto, você não pode armazenar false em um cookie). A terceira linha remove o cookie do seu script.

Leia mais: Redis Servidor Como UM Manipulador de Sessão PHP

Ocultar Arquivos do Navegador

Se você tiver usado o micro-frameworks de PHP, então você deve ter visto a estrutura de diretório específicos, que garante a colocação de arquivos corretamente. Frameworks permitem ter arquivos diferentes, como controladores, modelos, arquivo de configuração(.yaml) etc nesse diretório, mas na maioria das vezes o navegador não processa todos os arquivos, mas eles estão disponíveis para ver no navegador. Para resolver esse problema, você não deve colocar seus arquivos no diretório raiz, mas em uma pasta pública para que eles não estejam acessíveis o tempo todo no navegador. Olhar para a estrutura de diretório do Slim quadro abaixo:

slim estrutura de diretório

slim estrutura de diretório

Seguramente fazer o Upload de Arquivos

o upload de arquivos é uma parte necessária de qualquer usuário do aplicativo de processamento de dados. Mas lembre – se em alguns pontos, os arquivos também são usados para ataques XSS, como já expliquei acima no artigo. Voltando ao básico, sempre use a solicitação POST no formulário e declare a propriedade enctype= “multipart / form-data” na tag<form >. Em seguida, valide o tipo de arquivo usando a classe finfo como esta:

$finfo = new finfo(FILEINFO_MIME_TYPE);$fileContents = file_get_contents($_FILES);$mimeType = $finfo->buffer($fileContents);

os desenvolvedores podem criar suas próprias regras de validação de arquivos personalizadas e ultra-seguras, mas alguns frameworks como Laravel, Symfony e codeigniter já têm métodos pré-definidos para validar tipos de arquivos.

vejamos outro exemplo. O HTML do formulário deve ser assim:

<form method="post" enctype="multipart/form-data" action="upload.php"> File: <input type="file" name="pictures" multiple="true"> <input type="submit"></form>

e fazer upload.php contém o seguinte código:

foreach ($_FILES as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmpName = $_FILES; $name = basename($_FILES); move_uploaded_file($tmpName, "/var/www/project/uploads/$name"); }}

Corretamente, declarando o UPLOAD_ERR e basename() pode impedir a passagem de diretório ataques, mas algumas outras validações – como o tamanho do arquivo, de renomeação de arquivo e armazenamento de arquivos enviados em local privado – também são necessários para reforçar a segurança das aplicações.

leia mais: Upload de imagens e arquivos em PHP

use certificados SSL para HTTPS

todos os navegadores modernos, como Google Chrome, Opera, Firefox e outros, recomendam o uso do protocolo HTTPS para aplicativos da web. HTTPs fornece um canal de acesso seguro e criptografado para sites não confiáveis. Você deve incluir HTTPS instalando o certificado SSL em seu site. Ele também fortalece seus aplicativos da web contra ataques XSS e impede que os hackers leiam dados transportados usando códigos. O Cloudways fornece certificados SSL gratuitos com um clique, válidos por 90 dias e você pode revogá-los ou renová-los facilmente com um clique. Você pode seguir os guias para configurar certificados SSL em seus aplicativos PHP, WordPress, Magento e Drupal.

implantar aplicativos PHP em nuvens

a hospedagem é a etapa final e primordial para qualquer aplicativo da web, pois você sempre cria o projeto em servidores PHP locais e os implementa em servidores ao vivo que oferecem hospedagem compartilhada, em nuvem ou dedicada. Eu sempre recomendo usar hospedagem na nuvem como DigitalOcean, Linode, AWS. Eles são rápidos, seguros e protegidos para qualquer tipo de site e aplicativo. Eles sempre fornecem camada segura para evitar ataques DDOS, Força bruta e phishing que são altamente prejudiciais para aplicativos da web.

Você Também Pode Gostar: Armadilhas do Laravel de Hospedagem Compartilhada para Seus Projetos

Para implantar aplicativos PHP em servidores na nuvem, você deve ter o bom do Linux habilidades poderosas para criar web pilhas como LÂMPADA ou LEMP, que muitas vezes os custos de tempo e orçamento para Linux profissionais. Em vez disso, Cloudways managed PHP e MySQL hosting platform fornece a maneira fácil de implantar servidores com Thunderstack em poucos cliques nos provedores de nuvem acima mencionados. O Thunderstack ajuda seu aplicativo PHP a ser completamente protegido de vários ataques maliciosos e garante um desempenho otimizado.

leia mais: Enhanced Cloudways Staging Environment agora está disponível para todos os usuários

Document Root Setup

a raiz do documento para aplicativos PHP em qualquer servidor deve ser definida como var / www / html para que os usuários possam acessar seu site através do navegador. Mas em alguns casos, quando você está desenvolvendo APIs com estruturas como Laravel, Symfony e Slim, você precisa atualizar o webroot para `/public folder.

/public serve a saída do aplicativo semelhante ao site PHP simples com índice.arquivo php. O objetivo de definir o webroot para var / www / html / public é ocultar os arquivos sensíveis como .htaccess E.env que contém as variáveis de ambiente e credenciais do banco de dados, Correio, APIs de pagamento.

além disso, estruturas como Laravel, Symfony recomendam não mover todos os seus arquivos para a pasta raiz, em vez disso, criar uma boa estrutura de diretório para salvar arquivos relacionados como view, models e controllers é uma abordagem mais razoável.

registrar todos os erros e ocultar na produção

depois de ter desenvolvido o site e implantado no servidor ao vivo. A primeira coisa que você deve fazer é desativar a exibição de erros, porque os hackers podem obter as mesmas informações valiosas dos erros. Defina este parâmetro em seu php.arquivo ini:

display_errors=Off

agora, depois de fazer display off, registrar erros PHP para um arquivo específico para necessidades futuras:

log_errors=Onerror_log=/var/log/httpd/php_scripts_error.log

obviamente, você pode alterar o nome do arquivo como quiser.

Você Também Pode Gostar: Simplificar Laravel Log de Erro com PHP Rollbar Integração

lista de permissões de IP Públicos para o Mysql

Ao trabalhar com aplicativos PHP você frequentemente precisa de configuração de banco de dados mysql em scripts internos, bem como no mysql clientes. A maioria dos clientes é usada para configurar a conexão remota MySQL que precisa do endereço IP ou outro nome de host fornecido pelo servidor de hospedagem para criar conexão.

o IP público para a conexão remota Mysql deve estar na lista de permissões do seu servidor de hospedagem para que um usuário anônimo não possa obter acesso ao banco de dados. Por exemplo, em Cloudways você pode whitelist IP como:

Agora você pode conectar o SQLyog ou Mysql workbench para trabalhar remotamente com o banco de dados.

P: Como testar a segurança do PHP?

A: existem poucas ferramentas de scanner de código disponíveis no mercado que podem ajudá-lo a analisar a qualidade e a segurança do código de seus aplicativos PHP. PHP Malware Finder (PMF) é uma das principais ferramentas de teste de segurança que ajuda a encontrar códigos maliciosos nos arquivos. Você também pode usar rasgos, que é uma ferramenta de análise de código popular que ajuda a encontrar vulnerabilidades de código em tempo real.

P: Como garantir a segurança do banco de dados PHP?

A: para garantir a segurança do banco de dados, você deve sempre usar práticas como SQL injection protection, firewalls de banco de dados, criptografias de dados regulares e outras semelhantes.

Q: Qual é um método seguro para criptografar senha em PHP?

A: Md5 é o acrônimo para Message Process 5, e sha1 é o acrônimo para Secure Hash Algorithm 1. Ambos são utilizados para criptografar strings. Depois que uma string é criptografada, ela fica repetitiva para decodificá-la. Md5 e sha1 são excepcionalmente úteis ao armazenar senhas dentro do banco de dados.

P: O que é uma vulnerabilidade PHP?

A: PHP Object Injection é uma vulnerabilidade no nível do aplicativo que parece permitir que um agressor execute diversos tipos de agressões nocivas, como injeção de código, injeção SQL, travessia de caminho e negação de Serviço.

um ataque DDoS compromete vários ataques de sistemas de computador. Os alvos usuais são servidores, sites ou outros recursos de rede.

isso acontece quando a entrada fornecida pelo Usuário não é gerenciada antes de ser passada para a função PHP unserialize (). Como o PHP permite a serialização de objetos, os agressores podem passar strings serializadas ad-hoc para uma chamada unserialize() indefesa.

Acabando!

bem, as melhores práticas de segurança PHP é um tema muito vasto. Desenvolvedores de todo o mundo tendem a desenvolver diferentes casos de uso para proteger aplicativos da web. Enquanto muitas empresas executam diferentes programas de recompensas para descobrir brechas de segurança e vulnerabilidades em seus aplicativos e, assim, recompensar os especialistas em segurança que apontam brechas críticas nos aplicativos. Este artigo aborda questões básicas de segurança PHP, para ajudá-lo a entender como proteger seus projetos PHP de diferentes ataques maliciosos. Também escreverei sobre mais algumas dicas e truques de segurança do PHP no futuro. Até lá, você pode contribuir com seus pensamentos e práticas de segurança na seção de comentários abaixo.

Compartilhe sua opinião na seção de comentários. COMENTÁRIO AGORA

Partilhar Este Artigo

comentário de Clientes no

“Cloudways de hospedagem tem um dos melhores clientes de serviço e hospedagem de velocidade”

Sanjit C

Shahroze Nawaz

Shahroze PHP é um Gerente de Comunidade em Cloudways – Gerenciado, PHP, Plataforma de Hospedagem. Além de sua vida profissional, ele adora filmes e Viagens. Você pode enviá-lo por e-mail em

conecte-se em: fórum da Comunidade do Twitter

Leave a Reply

O seu endereço de email não será publicado.