Estou aprendendo PHP sozinho e tomei conhecimento da função strip_tags().Será esta a única forma de aumentar a segurança?

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

Pergunta

Sou novo em PHP e estou seguindo um tutorial aqui:Link

É bastante assustador que um usuário possa escrever código php em um input e basicamente estragar seu site, certo?

Bem, agora estou um pouco paranóico e prefiro aprender as melhores práticas de segurança logo de cara do que tentar aplicá-las depois de ter alguns hábitos em mim.

Como sou novo em PHP (literalmente aprendi há dois dias), posso aprender praticamente qualquer coisa facilmente, sem ficar confuso.

De que outra maneira posso evitar travessuras em meu site?:D

Foi útil?

Solução

Há várias coisas a serem lembradas ao desenvolver um aplicativo PHP, strip_tags() Só ajuda com um desses. Na realidade strip_tags(), embora eficaz, pode até fazer mais do que o necessário: converter personagens possivelmente perigosos com htmlspecialchars() deve até ser preferível, dependendo da situação.

Geralmente tudo se resume a duas regras simples: filtre todas as entradas, escape de toda a saída. Agora você precisa entender o que exatamente constitui entrada e saída.

Saída é fácil, tudo o que seu aplicativo envia para o navegador é emitido, então use htmlspecialchars() Ou qualquer outra função de fuga sempre que você produzir dados que você não escreveu.

Entrada são dados não codificados no seu código PHP: coisas provenientes de um formulário via postagem, de uma string de consulta via get, de cookies, todos aqueles devo Seja filtrado da maneira mais apropriada, dependendo de suas necessidades. Mesmo dados provenientes de um banco de dados devem ser considerados potencialmente perigosos; Especialmente no servidor compartilhado, você nunca sabe se o banco de dados foi comprometido em outros lugares de uma maneira que também poderia afetar seu aplicativo.

Existem diferentes maneiras de filtrar os dados: listas brancas para permitir apenas valores selecionados, validação com base no formato de entrada Expcted e assim por diante. Uma coisa que eu nunca sugiro é tentar corrigir os dados que você recebe dos usuários: faça com que eles joguem com suas regras, se você não conseguir o que espera, rejeite a solicitação em vez de tentar limpá -lo.

Atenção especial, se você lidar com um banco de dados, deve ser pago às injeções de SQL: esse tipo de ataque depende de você não construir corretamente strings de consulta que você envia ao banco de dados, para que o atacante possa forjá -los tentando executar instruções maliciosas. Você deve sempre usar uma função de fuga, como mysql_real_escape_string() ou, melhor, use declarações preparadas com A extensão Mysqli ou usando PDO.

Há mais a dizer sobre esse tópico, mas esses pontos devem começar.

Hth

EDITAR: Para esclarecer, "filtrando a entrada", quero dizer, decida o que é bom e o que é ruim, não modifique os dados de entrada de alguma forma. Como eu disse, nunca modificaria os dados do usuário, a menos que sejam emitidos para o navegador.

Outras dicas

Strip_tags não é a melhor coisa a ser usada, não protege em todos os casos.

HTML Purify:http://htmlpurifier.org/

É uma opção muito boa para processar dados recebidos, no entanto, eles ainda não atendem a todos os casos de uso - mas é definitivamente um bom ponto de partida.

Devo dizer que tutorial você mencionou é um pouco enganador sobre segurança:

É importante observar que você nunca deseja trabalhar diretamente com os valores $_GET e $_POST.Sempre envie seu valor para uma variável local e trabalhe com ele lá.Existem várias implicações de segurança envolvidas com os valores quando você acessa (ou sai) $ _Get & $ _Post.

Isso não faz sentido.Copiar um valor para uma variável local não é mais seguro do que usar as variáveis ​​$_GET ou $_POST diretamente.

Na verdade, não há nada inerentemente inseguro em nenhum dado.O que importa é o que você faz com isso.Existem razões perfeitamente legítimas pelas quais você pode ter uma variável $_POST que contém ; rm -rf /.Isso é adequado para saída em uma página HTML ou armazenamento em um banco de dados, por exemplo.

A única vez que não é seguro é quando você usa um comando como system ou exec.E é nesse momento que você precisa se preocupar com quais variáveis ​​você está usando.Nesse caso, você provavelmente desejaria usar algo como uma lista de permissões ou, pelo menos, analisar seus valores escapeshellarg.

Da mesma forma, envia consultas a bancos de dados, envia HTML a navegadores e assim por diante.Faça escape dos dados antes de enviá-los para outro lugar, usando o método de escape apropriado para o destino.

Strip_tags remove cada peça de HTML. Soluções mais sofisticadas são baseadas na lista de permissões (ou seja, permitindo tags HTML específicas). Uma boa lista de permissões de permissões é htmlpurifyer http://htmlpurifier.org/

E, claro, no lado do banco de dados, usam funções como mysql_real_escape_string ou pg_escape_string

Bem, provavelmente estou errado, mas ... em toda a literatura, eu li, as pessoas dizem que é muito melhor usar htmlspellchars.

Além disso, bastante necessário para lançar dados de entrada. (Por exemplo, por exemplo, se você tem certeza de que é ID de usuário).

Bem, de antemão, quando você começar a usar o banco de dados - use mysql_real_escape_string em vez de mysql_escape_string para impedir as injeções SQL (em alguns livros antigos, ainda está escrito mysql_escape_string).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top