Esse post tem o objetivo de mostrar o dia-a-dia de um desenvolvedor com uma nova línguagem e amedrontar os estudantes e possíveis estudantes na área de sistemas.
Veja a lista de problemas que tivemos na Evodata em um único projeto PHP.
Instalamos o WAMP, baixamos o NetBeans 7 (muito bom pra PHP e Javascript, integra legal com o jQuery), as bibilhotecas jQuery, jQuery UI e beleza.
Fizemos as primeiras telas do sistema, apresentamos ao cliente, ele gostou e pediu para colocarmos em um servidor dele para ele poder apresentar ao cliente dele.
Descobrimos primeiro que o servidor utilizado pelo nosso cliente estava configurado com opções não recomendadas, o pior foi o bendito REGISTER_GLOBALS, ele mistura variáveis globais com os atributos da SESSION os parametros GET e POST do PHP.
Explicando melhor o problema 1)
A sessão tinha uma variavel idioma (que grava o id do idioma do usuário logado), quando um usuário admin cadastrava um usuário (que tinha um campo idioma que era enviado via post no formulário) o idioma da sessão se tornava o idioma do usuário recém cadastrado.
Resolver é fácil, desligue o REGISTER_GLOBALS, mas o cliente tinha uma hospedagem windows na locaweb e ele usa outros sistemas em ASP e ASP.net (a locaweb não deixa desligar o REGISTER_GLOBALS na hospedagem windows)
Com a fase inicial funcionando, passamos as novas funcionalidades do sistema, fizemos testamos e apresentamos ao cliente.
Ele novamente aprovou, e fomos subir no servidor dele novamente e adivinhe, a versão do PHP do servidor era bem antiga e não suportava comandos como o __DIR__ que haviamos usado.
Como o cliente queria muito o sistema dele no ar ele decidiu por comprar um serviço de cloud server na propria locaweb.
Ele veio com um linux beeem estranho, e foi um parto conseguir instalar todos os pacotes nele, por sorte essa parte de infra-estrutura era por parte do cliente, mas o TI dele passou alguns dias até deixar o ambiente ok.
Até que enfim subimos o sistema no servidor novo e adivinhem! Novo problema, as tabelas estavam com nome minusculo mas nossas SQL's estavam referenciando elas em upcase.
No windows isso não faz diferença (da para configurar para ser case-sensitive, mas não é o padrão), já no Linux o padrão é case-sensitive.
Alteramos todos os nomes de todas as 60 tabelas do sistema para upcase e sistema rodando.
Como antes de PHP desenvolviamos em Java, estavamos acostumados a usar parametros com placeholders como o "?", usado pelo JDBC, nossa sorte é que o PDO tem um esquema similar e usamos isto em todas as funções de banco.
Isso além de deixar as coisas um pouco mais separadas, ajuda a proteger o sistema contra SQL-Injection, então esse foi um ponto muito positivo.
Desde o começo do projeto tivemos dúvidas sobre segurança, sabiamos que usando os bindParam e bindValue estavamos protegidos contra SQL-Injection, mas isso é tudo?
Foi ai que nos deparamos com o XSS, pesquisamos e testamos várias técnicas de combate ao XSS e achamos a função htmlspecialchars(), que transforma as tags como <> em < e > e o
Isso faz com que se alguem tentar colocar um código javascript dentro de um form do seu sistema, ele será escapado e mostrado como texto.
E depois veio roubo de id da sessão e por assim vai...
Fato é, você só aprende a desenvolver desenvolvendo.
Nenhum comentário:
Postar um comentário