Melhore a segurança de nossos aplicativos com PHP

Índice
PHP surgiu como uma linguagem versátil que nos permite manipular os dados inseridos por meio de um formulário HTMLÉ claro que em sua constituição há mais ferramentas e recursos do que apenas isso.
A versatilidade e facilidade de uso o tornam um dos idiomas mais usados ​​mundialmente para projetos web que vão desde simples formulários de contato, até ser a base de grandes aplicações no início, como o Facebook.
O problema com versatilidade e facilidade de uso é que o desenvolvedor não é forçado a escrever código seguro, mas com recursos muito inseguros o código rodará perfeitamente, e é aí que vêm os problemas.
A segurança de aplicativos da Web é algo que você não tem desde o início em PHPPorém, isso não a torna uma linguagem insegura, já que segurança corresponde a um conjunto de técnicas e estilos de trabalho que um programador deve conhecer para aplicá-los em seus scripts.
FrameworksÉ verdade que com o aparecimento de frameworks Muitos recursos de segurança são incluídos por padrão, no entanto, nem todo desenvolvedor usou um estrutura em aplicativos mais antigos e é possível que para algumas funções use um estrutura ser um excesso.
As chaves para obter segurança em nossos aplicativos com PHP São eles: controlar e refinar os dados que o usuário insere no formulário, verificar a origem das solicitações HTTP que nosso aplicativo recebe e, por fim, evita a execução direta de instruções por meio de formulários.
Existe uma regra na programação e é universal, ou seja, não se aplica apenas a PHPÉ que todos os dados que não são gerados pela aplicação são potencialmente maliciosos, isto significa que se não for algo que é um resultado que programamos não podemos confiar.
Este princípio se aplica a valores de formulários, arquivos, Bases de dados, portanto, o primeiro passo para melhorar nossa segurança é filtrar os dados se tivermos que interagir com esses elementos.
Listaremos algumas das melhores práticas que podemos aplicar ao filtrar os dados inseridos em nosso formulário:
Use listas de valores permitidosCom esta prática sabemos que se os dados que chegam através do formulário não passam pela nossa lista de valores permitidos e seguros, não devem ir para o processamento, neste momento deve ser enviada uma mensagem ao utilizador para corrigir os seus dados.
Nunca corrija dados inválidosPode parecer tentador fazer um sistema muito inteligente que corrige dados com inconsistências, mas no longo prazo isso pode nos trazer problemas e vulnerabilidades, por isso, se detectarmos algo irregular, não devemos processá-lo.
Usar convenção de nomenclaturaCom esta prática podemos distinguir os dados e valores seguros daqueles dados e valores introduzidos pelo utilizador, com isso iremos reforçar na programação a utilização dos primeiros para processamento.
dois tipos de filtragem que podemos fazer, o primeiro é de valores que conhecemos e o segundo de valores que não conhecemos.
O primeiro É muito fácil de fazer, basta realizar rotinas com listas de elementos conhecidos e compará-las, porém isso é incômodo e difícil de realizar em aplicações maiores. O segundo Implica criar rotinas que avaliem a estrutura do valor e se corresponder àquela que consideramos segura, deixamos ir para processamento, caso contrário lançamos um erro, sendo de natureza dinâmica este é o formato recomendado.
Vejamos a seguir um exemplo de código do primeiro tipo de filtragem:
No código a seguir, veremos como criamos um formulário que possui um elemento selecionar Para o usuário selecionar uma cor, como o usuário não precisa escrever os dados para inserir diretamente, podemos cair no erro de não validar as informações, mas isso significa apenas que temos uma lacuna de segurança já que com um formulário que se aplica os mesmos nomes podemos receber informações potencialmente perigosas.
É por isso que uma vez que o valor do formulário é enviado através PUBLICAR, nosso script avalia os valores possíveis e, no caso de ser algum dos valores esperados, passamos para nosso array de valores seguros conforme vemos a seguir.

Com isso resolvemos o problema de forma simples, porém se a lista em vez de ter três cores tivesse cem, a história da simplicidade teria sido diferente.
No exemplo a seguir vamos validar dinamicamente um campo inserido pelo usuário de forma adequada, para isso devemos usar expressões regulares e desta forma evitar a entrada de caracteres que coloquem nosso processamento em risco, avaliar também o tamanho da entrada e assim evitar um transbordar ou sobrecarga de nosso tipo de dados no processamento do programa. Vamos ver o código na imagem:

PROLONGAR

Aqui, a chave para obter a validação é saber corretamente o que queremos processar, por exemplo, no caso de um nome de usuário, o que normalmente pedimos são caracteres alfanuméricos e hifens, é por isso que no frase regular A gente valida isso, também precisa ser maior que 0 caracteres e no máximo 32, se o que for digitado pelo usuário atender a tudo isso, passa na validação, o melhor de tudo é que isso funciona com um valor como cem, pois é totalmente dinâmico.
Outra ameaça contra a qual temos que nos proteger é a execução de scripts de outros sites, graças ao AJAX Podemos enviar formulários do cliente para uma rota, incluindo o tipo de solicitação e os valores que desejamos.
Ponto fracoEste tipo de fraqueza torna muito fácil para alguém inspecionar nosso formulário e verificar nossos campos, onde por possuir esses nomes e o método HTTP Tente enviar valores inseguros, para evitar isso devemos aplicar técnicas que nos permitam validar de onde vem a solicitação e se é seguro permitir sua execução, caso contrário, evite continuar o caminho dentro de nosso programa.
Para evitar este problema, um sistema de tokens Y sessões, para que no momento do envio do formulário avaliemos se a sessão é igual à estabelecida de forma segura, e assim o utilizador malicioso não pode continuar.
O principal objetivo de um invasor é ser capaz de inserir seu código em nosso ambiente, para isso eles usam injeções de código SQL, este ataque é conhecido como Injeção SQL, onde com formulários não seguros e processamento impróprio, podemos receber instruções SQL diretamente sem limites. Por exemplo, se nossa avaliação SQL é o seguinte em nosso script PHP:

Podemos usar qualquer usuário do sistema como nome de usuário e para o senha nós usamos dois scripts “--” com isso podemos passar segurança sem problemas, já que dois scripts são um comentário SQL e, portanto, a senha não será avaliada.
A maneira correta de avaliar um SQL que se origina do usuário, está removendo os caracteres especiais e perigosos, apenas avaliando expressões seguras. Vejamos um exemplo abaixo de como evitar o caso anterior:
A primeira coisa que devemos fazer é sanitização de dados, ou seja, evita que chegue puro da forma ao nosso SQL; A segunda coisa que devemos avaliar é que se os dois valores correspondem a dar acesso, mas este corresponde à lógica de cada um, vejamos na imagem como alcançamos o objetivo:

PROLONGAR

Aqui o que fizemos foi usar a ferramenta declarações preparadas o que a livraria nos permite PDO para conexão com Base de dados, com isso conseguimos que o que é inserido nunca é levado em outro contexto que não seja de dados, também vemos que em vez de usar o método PUBLICAR Usamos nosso array seguro, isso significa que nossos dados já foram verificados, então o risco é menor.
Con esto hemos finalizado este tutorial, como vemos las acciones que podemos tomar para que nuestra aplicación sea más segura son simples, no requieren de un esfuerzo sobre humano, sin embargo nos ayudan a evitar los ataques más comunes y tal vez los que con más frecuencia Se dão. Existe uma má percepção sobre PHP dos que dizem que é uma linguagem insegura, mas a realidade é que a insegurança é produzida pelo programador, já que a linguagem só possui ferramentas que podemos usar para melhorar e prevenir ataques aos nossos aplicativos por meio de dados inseridos pelo usuário.
wave wave wave wave wave